TypeScript/lib/tsc.js
Mohamed Hegazy 8475e307f2 Port master into release-2.6 10/19 (#19348)
* Adding test case where opened file included in project is not added to ref count of configured project

* Fix the way configured project's reference is managed so that the open file

* Do not watch root folders for failed lookup locations and effective type roots
Fixes #19170

* LEGO: check in for master to temporary branch.

* LEGO: check in for master to temporary branch.

* Mark fresh spread objects w/ContainsObjectLiteral

* Test excess property checks of spreads of unions.

* Add exported members of all project files in the global completion list (#19069)

* checker.ts: Remove null check on symbols

* tsserverProjectSystem.ts: add two tests

* client.ts, completions.ts, types.ts: Add codeActions member to CompletionEntryDetails

* protocol.ts, session.ts: Add codeActions member to CompletionEntryDetails protocol

* protocol.ts, session.ts, types.ts: add hasAction to CompletionEntry

* session.ts, services.ts, types.ts: Add formattingOptions parameter to getCompletionEntryDetails

* completions.ts: define SymbolOriginInfo type

* completions.ts, services.ts: Add allSourceFiles parameter to getCompletionsAtPosition

* completions.ts, services.ts: Plumb allSourceFiles into new function getSymbolsFromOtherSourceFileExports inside getCompletionData

* completions.ts: add symbolToOriginInfoMap parameter to getCompletionEntriesFromSymbols and to return value of getCompletionData

* utilities.ts: Add getOtherModuleSymbols, getUniqueSymbolIdAsString, getUniqueSymbolId

* completions.ts: Set CompletionEntry.hasAction when symbol is found in symbolToOriginInfoMap (meaning there's an import action)

* completions.ts: Populate list with possible exports (implement getSymbolsFromOtherSourceFileExports)

* completions.ts, services.ts: Plumb host and rulesProvider into getCompletionEntryDetails

* completions.ts: Add TODO comment

* importFixes.ts: Add types ImportDeclarationMap and ImportCodeFixContext

* Move getImportDeclarations into getCodeActionForImport, immediately after the implementation

* importFixes.ts: Move createChangeTracker into getCodeActionForImport, immediately after getImportDeclarations

* importFixes.ts: Add convertToImportCodeFixContext function and reference it from the getCodeActions lambda

* importFixes.ts: Add context: ImportCodeFixContext parameter to getCodeActionForImport, update call sites, destructure it, use compilerOptions in getModuleSpecifierForNewImport

* importFixes.ts: Remove moduleSymbol parameter from getImportDeclarations and use the ambient one

* importFixes.ts: Use cachedImportDeclarations from context in getCodeActionForImport

* importFixes.ts: Move createCodeAction out, immediately above convertToImportCodeFixContext

* Move the declaration for lastImportDeclaration out of the getCodeActions lambda into getCodeActionForImport

* importFixes.ts: Use symbolToken in getCodeActionForImport

* importFixes.ts: Remove useCaseSensitiveFileNames altogether from getCodeActions lambda

* importFixes.ts: Remove local getUniqueSymbolId function and add checker parameter to calls to it

* importFixes.ts: Move getCodeActionForImport out into an export, immediately below convertToImportCodeFixContext

* completions.ts: In getCompletionEntryDetails, if there's symbolOriginInfo, call getCodeActionForImport

* importFixes.ts: Create and use importFixContext within getCodeActions lambda

* importFixes.ts: Use local newLineCharacter instead of context.newLineCharacter in getCodeActionForImport

* importFixes.ts: Use local host instead of context.host in getCodeActionForImport

* importFixes.ts: Remove dummy getCanonicalFileName line

* Filter symbols after gathering exports instead of before

* Lint

* Test, fix bugs, refactor

* Suggestions from code review

* Update api baseline

* Fix bug if previousToken is not an Identifier

* Replace `startsWith` with `stringContainsCharactersInOrder`

* Dont try to run unit tests with rwc tests again (#19240)

* In tsserver, indent logged JSON (#19080)

* noUnusedLocals: Warn for recursive call to private method (#18920)

* Added test for windows style paths watched directories

* Handle when directory watcher is invoked on file change
Fixes #19206

* Add quickfix and refactoring to install @types packages (#19130)

* Add quickfix and refactoring to install @types packages

* Move `validatePackageName` to `jsTyping.ts`

* Remove combinePaths overloads

* Respond to code review

* Update api baselines

* Use native PromiseConstructor

* Return false instead of undefined

* Remove getProjectRootPath

* Update api

* This wasnt required before... (#19262)

* Collapse jsdoc annotation refactors to one

Previously there were two, and two always fired.

* Update baselines

* Fix #19257: Ensure a generated signature has a return type (#19264)

* Fix #19257: Ensure a generated signature has a return type

* Ensure generated properties have types

* Use the same context for multiple inferences to the same property access

* Respect newLine compiler option in language service output (#19279)

* LEGO: check in for master to temporary branch.

* LEGO: check in for master to temporary branch.

* LEGO: check in for master to temporary branch.

* Disambiguate same-named refactors using description (#19267)

Disambiguate same-named refactors using actionName

* Set the scriptKind from the host configuration if present

* Update API baselines

* Remove erroneous error for JSDoc object literals

appears with checkJS.

* Update annotateWithTypeFromJSDoc tests

1. Object literals are single-line now.
2. Index signatures transform to TS index signatures.
3. The refactoring is only available when it could add types.

* Add a better test for jsdoc index signatures.

The test case shows that the errorenous error no longer appears.

* Fix bugs in jsdoc annotation refactor

1. Transform index signatures to TS index signatures.
2. Print object literals on a single line.
3. Only offer the refactor when it could add types. (There must not be a
type annotation already, and there must be a JSDoc that applies.)

* Move isJSDocIndexSignature to utilities

* Add failing testcase where when d.ts file is in program, the files get emitted multiple times with --out setting

* Modify api to emit affected files using callback instead of generating in memory output
Also marking few apis introduced during watch improvements changes that are suppose to be internal for now

* Use get files affected by internally and hence use file paths as input

* Simplify emit changed files further
Also use source file version as the signature of declaration file instead of computing it from text

* Do not cache the semantic diagnostics when compiler options has --out since we would anyways get all fresh diagnostics

* make getCurrentDirectory required (#19303)

* LEGO: check in for master to temporary branch.

* Actually use cached semantic diagnostics

* Fix tsc-instrumented

1. Make recursiveCreateDirectory correctly handle relative paths.
2. Remove dependency on Harness
3. Correctly increment iocapture0, iocapture1, ... iocaptureN.
4. Stop double-nesting baseline files.

* Fix lint

* Fix https://github.com/Microsoft/TypeScript/issues/19270: ensure output name is a valid locale name (#19308)

* Fix https://github.com/Microsoft/TypeScript/issues/19270: ensure output name is a valid locale name

* Use const instead of var

* Add comment

* Fix typo

* Split the concat logic for generatedLCGFile

* findAllRefs: Support anonymous default export (#19302)

* Fix undefined error using `getEffectiveTypeRoots` (#19300)

* Remove extra blank line in logs (#19307)

* Use Promise instead of PromiseLike (#19305)

* Workaround for nonnull operator on indexed accesses (#19275)

* Quick and dirty workaround

* Add third case to show current behavior

* Rename variable, replace elaboration from comment with links

* Remove some unnecessary `undefined` checks in extractSymbol (#19256)

* Fix "noStringLiteral" lint errors (#19310)

* LEGO: check in for master to temporary branch.

* Rename locale outputs

* Update LKG
2017-10-19 13:13:57 -07:00

61854 lines
3.0 MiB

/*! *****************************************************************************
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at http://www.apache.org/licenses/LICENSE-2.0
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
MERCHANTABLITY OR NON-INFRINGEMENT.
See the Apache Version 2.0 License for specific language governing permissions
and limitations under the License.
***************************************************************************** */
"use strict";
var __assign = (this && this.__assign) || Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
var ts;
(function (ts) {
var OperationCanceledException = (function () {
function OperationCanceledException() {
}
return OperationCanceledException;
}());
ts.OperationCanceledException = OperationCanceledException;
var ExitStatus;
(function (ExitStatus) {
ExitStatus[ExitStatus["Success"] = 0] = "Success";
ExitStatus[ExitStatus["DiagnosticsPresent_OutputsSkipped"] = 1] = "DiagnosticsPresent_OutputsSkipped";
ExitStatus[ExitStatus["DiagnosticsPresent_OutputsGenerated"] = 2] = "DiagnosticsPresent_OutputsGenerated";
})(ExitStatus = ts.ExitStatus || (ts.ExitStatus = {}));
var NodeBuilderFlags;
(function (NodeBuilderFlags) {
NodeBuilderFlags[NodeBuilderFlags["None"] = 0] = "None";
NodeBuilderFlags[NodeBuilderFlags["NoTruncation"] = 1] = "NoTruncation";
NodeBuilderFlags[NodeBuilderFlags["WriteArrayAsGenericType"] = 2] = "WriteArrayAsGenericType";
NodeBuilderFlags[NodeBuilderFlags["WriteTypeArgumentsOfSignature"] = 32] = "WriteTypeArgumentsOfSignature";
NodeBuilderFlags[NodeBuilderFlags["UseFullyQualifiedType"] = 64] = "UseFullyQualifiedType";
NodeBuilderFlags[NodeBuilderFlags["SuppressAnyReturnType"] = 256] = "SuppressAnyReturnType";
NodeBuilderFlags[NodeBuilderFlags["WriteTypeParametersInQualifiedName"] = 512] = "WriteTypeParametersInQualifiedName";
NodeBuilderFlags[NodeBuilderFlags["AllowThisInObjectLiteral"] = 1024] = "AllowThisInObjectLiteral";
NodeBuilderFlags[NodeBuilderFlags["AllowQualifedNameInPlaceOfIdentifier"] = 2048] = "AllowQualifedNameInPlaceOfIdentifier";
NodeBuilderFlags[NodeBuilderFlags["AllowAnonymousIdentifier"] = 8192] = "AllowAnonymousIdentifier";
NodeBuilderFlags[NodeBuilderFlags["AllowEmptyUnionOrIntersection"] = 16384] = "AllowEmptyUnionOrIntersection";
NodeBuilderFlags[NodeBuilderFlags["AllowEmptyTuple"] = 32768] = "AllowEmptyTuple";
NodeBuilderFlags[NodeBuilderFlags["IgnoreErrors"] = 60416] = "IgnoreErrors";
NodeBuilderFlags[NodeBuilderFlags["InObjectTypeLiteral"] = 1048576] = "InObjectTypeLiteral";
NodeBuilderFlags[NodeBuilderFlags["InTypeAlias"] = 8388608] = "InTypeAlias";
})(NodeBuilderFlags = ts.NodeBuilderFlags || (ts.NodeBuilderFlags = {}));
var TypeReferenceSerializationKind;
(function (TypeReferenceSerializationKind) {
TypeReferenceSerializationKind[TypeReferenceSerializationKind["Unknown"] = 0] = "Unknown";
TypeReferenceSerializationKind[TypeReferenceSerializationKind["TypeWithConstructSignatureAndValue"] = 1] = "TypeWithConstructSignatureAndValue";
TypeReferenceSerializationKind[TypeReferenceSerializationKind["VoidNullableOrNeverType"] = 2] = "VoidNullableOrNeverType";
TypeReferenceSerializationKind[TypeReferenceSerializationKind["NumberLikeType"] = 3] = "NumberLikeType";
TypeReferenceSerializationKind[TypeReferenceSerializationKind["StringLikeType"] = 4] = "StringLikeType";
TypeReferenceSerializationKind[TypeReferenceSerializationKind["BooleanType"] = 5] = "BooleanType";
TypeReferenceSerializationKind[TypeReferenceSerializationKind["ArrayLikeType"] = 6] = "ArrayLikeType";
TypeReferenceSerializationKind[TypeReferenceSerializationKind["ESSymbolType"] = 7] = "ESSymbolType";
TypeReferenceSerializationKind[TypeReferenceSerializationKind["Promise"] = 8] = "Promise";
TypeReferenceSerializationKind[TypeReferenceSerializationKind["TypeWithCallSignature"] = 9] = "TypeWithCallSignature";
TypeReferenceSerializationKind[TypeReferenceSerializationKind["ObjectType"] = 10] = "ObjectType";
})(TypeReferenceSerializationKind = ts.TypeReferenceSerializationKind || (ts.TypeReferenceSerializationKind = {}));
var DiagnosticCategory;
(function (DiagnosticCategory) {
DiagnosticCategory[DiagnosticCategory["Warning"] = 0] = "Warning";
DiagnosticCategory[DiagnosticCategory["Error"] = 1] = "Error";
DiagnosticCategory[DiagnosticCategory["Message"] = 2] = "Message";
})(DiagnosticCategory = ts.DiagnosticCategory || (ts.DiagnosticCategory = {}));
var ModuleResolutionKind;
(function (ModuleResolutionKind) {
ModuleResolutionKind[ModuleResolutionKind["Classic"] = 1] = "Classic";
ModuleResolutionKind[ModuleResolutionKind["NodeJs"] = 2] = "NodeJs";
})(ModuleResolutionKind = ts.ModuleResolutionKind || (ts.ModuleResolutionKind = {}));
var ModuleKind;
(function (ModuleKind) {
ModuleKind[ModuleKind["None"] = 0] = "None";
ModuleKind[ModuleKind["CommonJS"] = 1] = "CommonJS";
ModuleKind[ModuleKind["AMD"] = 2] = "AMD";
ModuleKind[ModuleKind["UMD"] = 3] = "UMD";
ModuleKind[ModuleKind["System"] = 4] = "System";
ModuleKind[ModuleKind["ES2015"] = 5] = "ES2015";
ModuleKind[ModuleKind["ESNext"] = 6] = "ESNext";
})(ModuleKind = ts.ModuleKind || (ts.ModuleKind = {}));
})(ts || (ts = {}));
var ts;
(function (ts) {
ts.timestamp = typeof performance !== "undefined" && performance.now ? function () { return performance.now(); } : Date.now ? Date.now : function () { return +(new Date()); };
})(ts || (ts = {}));
(function (ts) {
var performance;
(function (performance) {
var profilerEvent = typeof onProfilerEvent === "function" && onProfilerEvent.profiler === true
? onProfilerEvent
: function (_markName) { };
var enabled = false;
var profilerStart = 0;
var counts;
var marks;
var measures;
function mark(markName) {
if (enabled) {
marks.set(markName, ts.timestamp());
counts.set(markName, (counts.get(markName) || 0) + 1);
profilerEvent(markName);
}
}
performance.mark = mark;
function measure(measureName, startMarkName, endMarkName) {
if (enabled) {
var end = endMarkName && marks.get(endMarkName) || ts.timestamp();
var start = startMarkName && marks.get(startMarkName) || profilerStart;
measures.set(measureName, (measures.get(measureName) || 0) + (end - start));
}
}
performance.measure = measure;
function getCount(markName) {
return counts && counts.get(markName) || 0;
}
performance.getCount = getCount;
function getDuration(measureName) {
return measures && measures.get(measureName) || 0;
}
performance.getDuration = getDuration;
function forEachMeasure(cb) {
measures.forEach(function (measure, key) {
cb(key, measure);
});
}
performance.forEachMeasure = forEachMeasure;
function enable() {
counts = ts.createMap();
marks = ts.createMap();
measures = ts.createMap();
enabled = true;
profilerStart = ts.timestamp();
}
performance.enable = enable;
function disable() {
enabled = false;
}
performance.disable = disable;
})(performance = ts.performance || (ts.performance = {}));
})(ts || (ts = {}));
var ts;
(function (ts) {
ts.versionMajorMinor = "2.6";
ts.version = ts.versionMajorMinor + ".1";
})(ts || (ts = {}));
(function (ts) {
function isExternalModuleNameRelative(moduleName) {
return ts.pathIsRelative(moduleName) || ts.isRootedDiskPath(moduleName);
}
ts.isExternalModuleNameRelative = isExternalModuleNameRelative;
})(ts || (ts = {}));
(function (ts) {
ts.collator = typeof Intl === "object" && typeof Intl.Collator === "function" ? new Intl.Collator(undefined, { usage: "sort", sensitivity: "accent" }) : undefined;
ts.localeCompareIsCorrect = ts.collator && ts.collator.compare("a", "B") < 0;
function createDictionaryObject() {
var map = Object.create(null);
map.__ = undefined;
delete map.__;
return map;
}
function createMap() {
return new MapCtr();
}
ts.createMap = createMap;
function createUnderscoreEscapedMap() {
return new MapCtr();
}
ts.createUnderscoreEscapedMap = createUnderscoreEscapedMap;
function createSymbolTable(symbols) {
var result = createMap();
if (symbols) {
for (var _i = 0, symbols_1 = symbols; _i < symbols_1.length; _i++) {
var symbol = symbols_1[_i];
result.set(symbol.escapedName, symbol);
}
}
return result;
}
ts.createSymbolTable = createSymbolTable;
function createMapFromTemplate(template) {
var map = new MapCtr();
for (var key in template) {
if (hasOwnProperty.call(template, key)) {
map.set(key, template[key]);
}
}
return map;
}
ts.createMapFromTemplate = createMapFromTemplate;
var MapCtr = typeof Map !== "undefined" && "entries" in Map.prototype ? Map : shimMap();
function shimMap() {
var MapIterator = (function () {
function MapIterator(data, selector) {
this.index = 0;
this.data = data;
this.selector = selector;
this.keys = Object.keys(data);
}
MapIterator.prototype.next = function () {
var index = this.index;
if (index < this.keys.length) {
this.index++;
return { value: this.selector(this.data, this.keys[index]), done: false };
}
return { value: undefined, done: true };
};
return MapIterator;
}());
return (function () {
function class_1() {
this.data = createDictionaryObject();
this.size = 0;
}
class_1.prototype.get = function (key) {
return this.data[key];
};
class_1.prototype.set = function (key, value) {
if (!this.has(key)) {
this.size++;
}
this.data[key] = value;
return this;
};
class_1.prototype.has = function (key) {
return key in this.data;
};
class_1.prototype.delete = function (key) {
if (this.has(key)) {
this.size--;
delete this.data[key];
return true;
}
return false;
};
class_1.prototype.clear = function () {
this.data = createDictionaryObject();
this.size = 0;
};
class_1.prototype.keys = function () {
return new MapIterator(this.data, function (_data, key) { return key; });
};
class_1.prototype.values = function () {
return new MapIterator(this.data, function (data, key) { return data[key]; });
};
class_1.prototype.entries = function () {
return new MapIterator(this.data, function (data, key) { return [key, data[key]]; });
};
class_1.prototype.forEach = function (action) {
for (var key in this.data) {
action(this.data[key], key);
}
};
return class_1;
}());
}
function toPath(fileName, basePath, getCanonicalFileName) {
var nonCanonicalizedPath = isRootedDiskPath(fileName)
? normalizePath(fileName)
: getNormalizedAbsolutePath(fileName, basePath);
return getCanonicalFileName(nonCanonicalizedPath);
}
ts.toPath = toPath;
function length(array) {
return array ? array.length : 0;
}
ts.length = length;
function forEach(array, callback) {
if (array) {
for (var i = 0; i < array.length; i++) {
var result = callback(array[i], i);
if (result) {
return result;
}
}
}
return undefined;
}
ts.forEach = forEach;
function firstDefined(array, callback) {
for (var i = 0; i < array.length; i++) {
var result = callback(array[i], i);
if (result !== undefined) {
return result;
}
}
return undefined;
}
ts.firstDefined = firstDefined;
function findAncestor(node, callback) {
while (node) {
var result = callback(node);
if (result === "quit") {
return undefined;
}
else if (result) {
return node;
}
node = node.parent;
}
return undefined;
}
ts.findAncestor = findAncestor;
function zipWith(arrayA, arrayB, callback) {
var result = [];
Debug.assert(arrayA.length === arrayB.length);
for (var i = 0; i < arrayA.length; i++) {
result.push(callback(arrayA[i], arrayB[i], i));
}
return result;
}
ts.zipWith = zipWith;
function zipToMap(keys, values) {
Debug.assert(keys.length === values.length);
var map = createMap();
for (var i = 0; i < keys.length; ++i) {
map.set(keys[i], values[i]);
}
return map;
}
ts.zipToMap = zipToMap;
function every(array, callback) {
if (array) {
for (var i = 0; i < array.length; i++) {
if (!callback(array[i], i)) {
return false;
}
}
}
return true;
}
ts.every = every;
function find(array, predicate) {
for (var i = 0; i < array.length; i++) {
var value = array[i];
if (predicate(value, i)) {
return value;
}
}
return undefined;
}
ts.find = find;
function findLast(array, predicate) {
for (var i = array.length - 1; i >= 0; i--) {
var value = array[i];
if (predicate(value, i)) {
return value;
}
}
return undefined;
}
ts.findLast = findLast;
function findIndex(array, predicate) {
for (var i = 0; i < array.length; i++) {
if (predicate(array[i], i)) {
return i;
}
}
return -1;
}
ts.findIndex = findIndex;
function findMap(array, callback) {
for (var i = 0; i < array.length; i++) {
var result = callback(array[i], i);
if (result) {
return result;
}
}
Debug.fail();
}
ts.findMap = findMap;
function contains(array, value) {
if (array) {
for (var _i = 0, array_1 = array; _i < array_1.length; _i++) {
var v = array_1[_i];
if (v === value) {
return true;
}
}
}
return false;
}
ts.contains = contains;
function indexOf(array, value) {
if (array) {
for (var i = 0; i < array.length; i++) {
if (array[i] === value) {
return i;
}
}
}
return -1;
}
ts.indexOf = indexOf;
function indexOfAnyCharCode(text, charCodes, start) {
for (var i = start || 0; i < text.length; i++) {
if (contains(charCodes, text.charCodeAt(i))) {
return i;
}
}
return -1;
}
ts.indexOfAnyCharCode = indexOfAnyCharCode;
function countWhere(array, predicate) {
var count = 0;
if (array) {
for (var i = 0; i < array.length; i++) {
var v = array[i];
if (predicate(v, i)) {
count++;
}
}
}
return count;
}
ts.countWhere = countWhere;
function filter(array, f) {
if (array) {
var len = array.length;
var i = 0;
while (i < len && f(array[i]))
i++;
if (i < len) {
var result = array.slice(0, i);
i++;
while (i < len) {
var item = array[i];
if (f(item)) {
result.push(item);
}
i++;
}
return result;
}
}
return array;
}
ts.filter = filter;
function filterMutate(array, f) {
var outIndex = 0;
for (var i = 0; i < array.length; i++) {
if (f(array[i], i, array)) {
array[outIndex] = array[i];
outIndex++;
}
}
array.length = outIndex;
}
ts.filterMutate = filterMutate;
function clear(array) {
array.length = 0;
}
ts.clear = clear;
function map(array, f) {
var result;
if (array) {
result = [];
for (var i = 0; i < array.length; i++) {
result.push(f(array[i], i));
}
}
return result;
}
ts.map = map;
function sameMap(array, f) {
var result;
if (array) {
for (var i = 0; i < array.length; i++) {
if (result) {
result.push(f(array[i], i));
}
else {
var item = array[i];
var mapped = f(item, i);
if (item !== mapped) {
result = array.slice(0, i);
result.push(mapped);
}
}
}
}
return result || array;
}
ts.sameMap = sameMap;
function flatten(array) {
var result;
if (array) {
result = [];
for (var _i = 0, array_2 = array; _i < array_2.length; _i++) {
var v = array_2[_i];
if (v) {
if (isArray(v)) {
addRange(result, v);
}
else {
result.push(v);
}
}
}
}
return result;
}
ts.flatten = flatten;
function flatMap(array, mapfn) {
var result;
if (array) {
result = [];
for (var i = 0; i < array.length; i++) {
var v = mapfn(array[i], i);
if (v) {
if (isArray(v)) {
addRange(result, v);
}
else {
result.push(v);
}
}
}
}
return result;
}
ts.flatMap = flatMap;
function flatMapIter(iter, mapfn) {
var result = [];
while (true) {
var _a = iter.next(), value = _a.value, done = _a.done;
if (done)
break;
var res = mapfn(value);
if (res) {
if (isArray(res)) {
result.push.apply(result, res);
}
else {
result.push(res);
}
}
}
return result;
}
ts.flatMapIter = flatMapIter;
function sameFlatMap(array, mapfn) {
var result;
if (array) {
for (var i = 0; i < array.length; i++) {
var item = array[i];
var mapped = mapfn(item, i);
if (result || item !== mapped || isArray(mapped)) {
if (!result) {
result = array.slice(0, i);
}
if (isArray(mapped)) {
addRange(result, mapped);
}
else {
result.push(mapped);
}
}
}
}
return result || array;
}
ts.sameFlatMap = sameFlatMap;
function mapDefined(array, mapFn) {
var result = [];
if (array) {
for (var i = 0; i < array.length; i++) {
var item = array[i];
var mapped = mapFn(item, i);
if (mapped !== undefined) {
result.push(mapped);
}
}
}
return result;
}
ts.mapDefined = mapDefined;
function mapDefinedIter(iter, mapFn) {
var result = [];
while (true) {
var _a = iter.next(), value = _a.value, done = _a.done;
if (done)
break;
var res = mapFn(value);
if (res !== undefined) {
result.push(res);
}
}
return result;
}
ts.mapDefinedIter = mapDefinedIter;
function span(array, f) {
if (array) {
for (var i = 0; i < array.length; i++) {
if (!f(array[i], i)) {
return [array.slice(0, i), array.slice(i)];
}
}
return [array.slice(0), []];
}
return undefined;
}
ts.span = span;
function spanMap(array, keyfn, mapfn) {
var result;
if (array) {
result = [];
var len = array.length;
var previousKey = void 0;
var key = void 0;
var start = 0;
var pos = 0;
while (start < len) {
while (pos < len) {
var value = array[pos];
key = keyfn(value, pos);
if (pos === 0) {
previousKey = key;
}
else if (key !== previousKey) {
break;
}
pos++;
}
if (start < pos) {
var v = mapfn(array.slice(start, pos), previousKey, start, pos);
if (v) {
result.push(v);
}
start = pos;
}
previousKey = key;
pos++;
}
}
return result;
}
ts.spanMap = spanMap;
function mapEntries(map, f) {
if (!map) {
return undefined;
}
var result = createMap();
map.forEach(function (value, key) {
var _a = f(key, value), newKey = _a[0], newValue = _a[1];
result.set(newKey, newValue);
});
return result;
}
ts.mapEntries = mapEntries;
function some(array, predicate) {
if (array) {
if (predicate) {
for (var _i = 0, array_3 = array; _i < array_3.length; _i++) {
var v = array_3[_i];
if (predicate(v)) {
return true;
}
}
}
else {
return array.length > 0;
}
}
return false;
}
ts.some = some;
function concatenate(array1, array2) {
if (!some(array2))
return array1;
if (!some(array1))
return array2;
return array1.concat(array2);
}
ts.concatenate = concatenate;
function deduplicate(array, areEqual) {
var result;
if (array) {
result = [];
loop: for (var _i = 0, array_4 = array; _i < array_4.length; _i++) {
var item = array_4[_i];
for (var _a = 0, result_1 = result; _a < result_1.length; _a++) {
var res = result_1[_a];
if (areEqual ? areEqual(res, item) : res === item) {
continue loop;
}
}
result.push(item);
}
}
return result;
}
ts.deduplicate = deduplicate;
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 changesAffectModuleResolution(oldOptions, newOptions) {
return !oldOptions ||
(oldOptions.module !== newOptions.module) ||
(oldOptions.moduleResolution !== newOptions.moduleResolution) ||
(oldOptions.noResolve !== newOptions.noResolve) ||
(oldOptions.target !== newOptions.target) ||
(oldOptions.noLib !== newOptions.noLib) ||
(oldOptions.jsx !== newOptions.jsx) ||
(oldOptions.allowJs !== newOptions.allowJs) ||
(oldOptions.rootDir !== newOptions.rootDir) ||
(oldOptions.configFilePath !== newOptions.configFilePath) ||
(oldOptions.baseUrl !== newOptions.baseUrl) ||
(oldOptions.maxNodeModuleJsDepth !== newOptions.maxNodeModuleJsDepth) ||
!arrayIsEqualTo(oldOptions.lib, newOptions.lib) ||
!arrayIsEqualTo(oldOptions.typeRoots, newOptions.typeRoots) ||
!arrayIsEqualTo(oldOptions.rootDirs, newOptions.rootDirs) ||
!equalOwnProperties(oldOptions.paths, newOptions.paths);
}
ts.changesAffectModuleResolution = changesAffectModuleResolution;
function compact(array) {
var result;
if (array) {
for (var i = 0; i < array.length; i++) {
var v = array[i];
if (result || !v) {
if (!result) {
result = array.slice(0, i);
}
if (v) {
result.push(v);
}
}
}
}
return result || array;
}
ts.compact = compact;
function relativeComplement(arrayA, arrayB, comparer, offsetA, offsetB) {
if (comparer === void 0) { comparer = compareValues; }
if (offsetA === void 0) { offsetA = 0; }
if (offsetB === void 0) { offsetB = 0; }
if (!arrayB || !arrayA || arrayB.length === 0 || arrayA.length === 0)
return arrayB;
var result = [];
outer: for (; offsetB < arrayB.length; offsetB++) {
inner: for (; offsetA < arrayA.length; offsetA++) {
switch (comparer(arrayB[offsetB], arrayA[offsetA])) {
case -1: break inner;
case 0: continue outer;
case 1: continue inner;
}
}
result.push(arrayB[offsetB]);
}
return result;
}
ts.relativeComplement = relativeComplement;
function sum(array, prop) {
var result = 0;
for (var _i = 0, array_5 = array; _i < array_5.length; _i++) {
var v = array_5[_i];
result += v[prop];
}
return result;
}
ts.sum = sum;
function append(to, value) {
if (value === undefined)
return to;
if (to === undefined)
return [value];
to.push(value);
return to;
}
ts.append = append;
function toOffset(array, offset) {
return offset < 0 ? array.length + offset : offset;
}
function addRange(to, from, start, end) {
if (from === undefined || from.length === 0)
return to;
if (to === undefined)
return from.slice(start, end);
start = start === undefined ? 0 : toOffset(from, start);
end = end === undefined ? from.length : toOffset(from, end);
for (var i = start; i < end && i < from.length; i++) {
var v = from[i];
if (v !== undefined) {
to.push(from[i]);
}
}
return to;
}
ts.addRange = addRange;
function pushIfUnique(array, toAdd) {
if (contains(array, toAdd)) {
return false;
}
else {
array.push(toAdd);
return true;
}
}
ts.pushIfUnique = pushIfUnique;
function appendIfUnique(array, toAdd) {
if (array) {
pushIfUnique(array, toAdd);
return array;
}
else {
return [toAdd];
}
}
ts.appendIfUnique = appendIfUnique;
function stableSort(array, comparer) {
if (comparer === void 0) { comparer = compareValues; }
return array
.map(function (_, i) { return i; })
.sort(function (x, y) { return comparer(array[x], array[y]) || compareValues(x, y); })
.map(function (i) { return array[i]; });
}
ts.stableSort = stableSort;
function rangeEquals(array1, array2, pos, end) {
while (pos < end) {
if (array1[pos] !== array2[pos]) {
return false;
}
pos++;
}
return true;
}
ts.rangeEquals = rangeEquals;
function elementAt(array, offset) {
if (array) {
offset = toOffset(array, offset);
if (offset < array.length) {
return array[offset];
}
}
return undefined;
}
ts.elementAt = elementAt;
function firstOrUndefined(array) {
return elementAt(array, 0);
}
ts.firstOrUndefined = firstOrUndefined;
function first(array) {
Debug.assert(array.length !== 0);
return array[0];
}
ts.first = first;
function lastOrUndefined(array) {
return elementAt(array, -1);
}
ts.lastOrUndefined = lastOrUndefined;
function last(array) {
Debug.assert(array.length !== 0);
return array[array.length - 1];
}
ts.last = last;
function singleOrUndefined(array) {
return array && array.length === 1
? array[0]
: undefined;
}
ts.singleOrUndefined = singleOrUndefined;
function singleOrMany(array) {
return array && array.length === 1
? array[0]
: array;
}
ts.singleOrMany = singleOrMany;
function replaceElement(array, index, value) {
var result = array.slice(0);
result[index] = value;
return result;
}
ts.replaceElement = replaceElement;
function binarySearch(array, value, comparer, offset) {
if (!array || array.length === 0) {
return -1;
}
var low = offset || 0;
var high = array.length - 1;
comparer = comparer !== undefined
? comparer
: function (v1, v2) { return (v1 < v2 ? -1 : (v1 > v2 ? 1 : 0)); };
while (low <= high) {
var middle = low + ((high - low) >> 1);
var midValue = array[middle];
if (comparer(midValue, value) === 0) {
return middle;
}
else if (comparer(midValue, value) > 0) {
high = middle - 1;
}
else {
low = middle + 1;
}
}
return ~low;
}
ts.binarySearch = binarySearch;
function reduceLeft(array, f, initial, start, count) {
if (array && array.length > 0) {
var size = array.length;
if (size > 0) {
var pos = start === undefined || start < 0 ? 0 : start;
var end = count === undefined || pos + count > size - 1 ? size - 1 : pos + count;
var result = void 0;
if (arguments.length <= 2) {
result = array[pos];
pos++;
}
else {
result = initial;
}
while (pos <= end) {
result = f(result, array[pos], pos);
pos++;
}
return result;
}
}
return initial;
}
ts.reduceLeft = reduceLeft;
function reduceRight(array, f, initial, start, count) {
if (array) {
var size = array.length;
if (size > 0) {
var pos = start === undefined || start > size - 1 ? size - 1 : start;
var end = count === undefined || pos - count < 0 ? 0 : pos - count;
var result = void 0;
if (arguments.length <= 2) {
result = array[pos];
pos--;
}
else {
result = initial;
}
while (pos >= end) {
result = f(result, array[pos], pos);
pos--;
}
return result;
}
}
return initial;
}
ts.reduceRight = reduceRight;
var hasOwnProperty = Object.prototype.hasOwnProperty;
function hasProperty(map, key) {
return hasOwnProperty.call(map, key);
}
ts.hasProperty = hasProperty;
function getProperty(map, key) {
return hasOwnProperty.call(map, key) ? map[key] : undefined;
}
ts.getProperty = getProperty;
function getOwnKeys(map) {
var keys = [];
for (var key in map) {
if (hasOwnProperty.call(map, key)) {
keys.push(key);
}
}
return keys;
}
ts.getOwnKeys = getOwnKeys;
function getOwnValues(sparseArray) {
var values = [];
for (var key in sparseArray) {
if (hasOwnProperty.call(sparseArray, key)) {
values.push(sparseArray[key]);
}
}
return values;
}
ts.getOwnValues = getOwnValues;
function arrayFrom(iterator, map) {
var result = [];
for (var _a = iterator.next(), value = _a.value, done = _a.done; !done; _b = iterator.next(), value = _b.value, done = _b.done, _b) {
result.push(map ? map(value) : value);
}
return result;
var _b;
}
ts.arrayFrom = arrayFrom;
function forEachEntry(map, callback) {
var iterator = map.entries();
for (var _a = iterator.next(), pair = _a.value, done = _a.done; !done; _b = iterator.next(), pair = _b.value, done = _b.done, _b) {
var key = pair[0], value = pair[1];
var result = callback(value, key);
if (result) {
return result;
}
}
return undefined;
var _b;
}
ts.forEachEntry = forEachEntry;
function forEachKey(map, callback) {
var iterator = map.keys();
for (var _a = iterator.next(), key = _a.value, done = _a.done; !done; _b = iterator.next(), key = _b.value, done = _b.done, _b) {
var result = callback(key);
if (result) {
return result;
}
}
return undefined;
var _b;
}
ts.forEachKey = forEachKey;
function copyEntries(source, target) {
source.forEach(function (value, key) {
target.set(key, value);
});
}
ts.copyEntries = copyEntries;
function assign(t) {
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
for (var _a = 0, args_1 = args; _a < args_1.length; _a++) {
var arg = args_1[_a];
for (var p in arg) {
if (hasProperty(arg, p)) {
t[p] = arg[p];
}
}
}
return t;
}
ts.assign = assign;
function equalOwnProperties(left, right, equalityComparer) {
if (left === right)
return true;
if (!left || !right)
return false;
for (var key in left) {
if (hasOwnProperty.call(left, key)) {
if (!hasOwnProperty.call(right, key) === undefined)
return false;
if (equalityComparer ? !equalityComparer(left[key], right[key]) : left[key] !== right[key])
return false;
}
}
for (var key in right) {
if (hasOwnProperty.call(right, key)) {
if (!hasOwnProperty.call(left, key))
return false;
}
}
return true;
}
ts.equalOwnProperties = equalOwnProperties;
function arrayToMap(array, makeKey, makeValue) {
var result = createMap();
for (var _i = 0, array_6 = array; _i < array_6.length; _i++) {
var value = array_6[_i];
result.set(makeKey(value), makeValue ? makeValue(value) : value);
}
return result;
}
ts.arrayToMap = arrayToMap;
function arrayToNumericMap(array, makeKey) {
var result = [];
for (var _i = 0, array_7 = array; _i < array_7.length; _i++) {
var value = array_7[_i];
result[makeKey(value)] = value;
}
return result;
}
ts.arrayToNumericMap = arrayToNumericMap;
function arrayToSet(array, makeKey) {
return arrayToMap(array, makeKey || (function (s) { return s; }), function () { return true; });
}
ts.arrayToSet = arrayToSet;
function cloneMap(map) {
var clone = createMap();
copyEntries(map, clone);
return clone;
}
ts.cloneMap = cloneMap;
function clone(object) {
var result = {};
for (var id in object) {
if (hasOwnProperty.call(object, id)) {
result[id] = object[id];
}
}
return result;
}
ts.clone = clone;
function extend(first, second) {
var result = {};
for (var id in second) {
if (hasOwnProperty.call(second, id)) {
result[id] = second[id];
}
}
for (var id in first) {
if (hasOwnProperty.call(first, id)) {
result[id] = first[id];
}
}
return result;
}
ts.extend = extend;
function createMultiMap() {
var map = createMap();
map.add = multiMapAdd;
map.remove = multiMapRemove;
return map;
}
ts.createMultiMap = createMultiMap;
function multiMapAdd(key, value) {
var values = this.get(key);
if (values) {
values.push(value);
}
else {
this.set(key, values = [value]);
}
return values;
}
function multiMapRemove(key, value) {
var values = this.get(key);
if (values) {
unorderedRemoveItem(values, value);
if (!values.length) {
this.delete(key);
}
}
}
function isArray(value) {
return Array.isArray ? Array.isArray(value) : value instanceof Array;
}
ts.isArray = isArray;
function isString(text) {
return typeof text === "string";
}
ts.isString = isString;
function tryCast(value, test) {
return value !== undefined && test(value) ? value : undefined;
}
ts.tryCast = tryCast;
function cast(value, test) {
if (value !== undefined && test(value))
return value;
Debug.fail("Invalid cast. The supplied value did not pass the test '" + Debug.getFunctionName(test) + "'.");
}
ts.cast = cast;
function noop() { }
ts.noop = noop;
function returnFalse() { return false; }
ts.returnFalse = returnFalse;
function returnTrue() { return true; }
ts.returnTrue = returnTrue;
function identity(x) { return x; }
ts.identity = identity;
function notImplemented() {
throw new Error("Not implemented");
}
ts.notImplemented = notImplemented;
function memoize(callback) {
var value;
return function () {
if (callback) {
value = callback();
callback = undefined;
}
return value;
};
}
ts.memoize = memoize;
function chain(a, b, c, d, e) {
if (e) {
var args_2 = [];
for (var i = 0; i < arguments.length; i++) {
args_2[i] = arguments[i];
}
return function (t) { return compose.apply(void 0, map(args_2, function (f) { return f(t); })); };
}
else if (d) {
return function (t) { return compose(a(t), b(t), c(t), d(t)); };
}
else if (c) {
return function (t) { return compose(a(t), b(t), c(t)); };
}
else if (b) {
return function (t) { return compose(a(t), b(t)); };
}
else if (a) {
return function (t) { return compose(a(t)); };
}
else {
return function (_) { return function (u) { return u; }; };
}
}
ts.chain = chain;
function compose(a, b, c, d, e) {
if (e) {
var args_3 = [];
for (var i = 0; i < arguments.length; i++) {
args_3[i] = arguments[i];
}
return function (t) { return reduceLeft(args_3, function (u, f) { return f(u); }, t); };
}
else if (d) {
return function (t) { return d(c(b(a(t)))); };
}
else if (c) {
return function (t) { return c(b(a(t))); };
}
else if (b) {
return function (t) { return b(a(t)); };
}
else if (a) {
return function (t) { return a(t); };
}
else {
return function (t) { return t; };
}
}
ts.compose = compose;
function formatStringFromArgs(text, args, baseIndex) {
baseIndex = baseIndex || 0;
return text.replace(/{(\d+)}/g, function (_match, index) { return args[+index + baseIndex]; });
}
ts.formatStringFromArgs = formatStringFromArgs;
ts.localizedDiagnosticMessages = undefined;
function getLocaleSpecificMessage(message) {
return ts.localizedDiagnosticMessages && ts.localizedDiagnosticMessages[message.key] || message.message;
}
ts.getLocaleSpecificMessage = getLocaleSpecificMessage;
function createFileDiagnostic(file, start, length, message) {
Debug.assertGreaterThanOrEqual(start, 0);
Debug.assertGreaterThanOrEqual(length, 0);
if (file) {
Debug.assertLessThanOrEqual(start, file.text.length);
Debug.assertLessThanOrEqual(start + length, file.text.length);
}
var text = getLocaleSpecificMessage(message);
if (arguments.length > 4) {
text = formatStringFromArgs(text, arguments, 4);
}
return {
file: file,
start: start,
length: length,
messageText: text,
category: message.category,
code: message.code,
};
}
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 createCompilerDiagnosticFromMessageChain(chain) {
return {
file: undefined,
start: undefined,
length: undefined,
code: chain.code,
category: chain.category,
messageText: chain.next ? chain : chain.messageText
};
}
ts.createCompilerDiagnosticFromMessageChain = createCompilerDiagnosticFromMessageChain;
function chainDiagnosticMessages(details, message) {
var text = getLocaleSpecificMessage(message);
if (arguments.length > 2) {
text = formatStringFromArgs(text, arguments, 2);
}
return {
messageText: text,
category: message.category,
code: message.code,
next: details
};
}
ts.chainDiagnosticMessages = chainDiagnosticMessages;
function concatenateDiagnosticMessageChains(headChain, tailChain) {
var lastChain = headChain;
while (lastChain.next) {
lastChain = lastChain.next;
}
lastChain.next = tailChain;
return headChain;
}
ts.concatenateDiagnosticMessageChains = concatenateDiagnosticMessageChains;
function 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 compareStrings(a, b, ignoreCase) {
if (a === b)
return 0;
if (a === undefined)
return -1;
if (b === undefined)
return 1;
if (ignoreCase) {
if (ts.collator) {
var result = ts.localeCompareIsCorrect ?
ts.collator.compare(a, b) :
a.localeCompare(b, undefined, { usage: "sort", sensitivity: "accent" });
return result < 0 ? -1 : result > 0 ? 1 : 0;
}
a = a.toUpperCase();
b = b.toUpperCase();
if (a === b)
return 0;
}
return a < b ? -1 : 1;
}
ts.compareStrings = compareStrings;
function compareStringsCaseInsensitive(a, b) {
return compareStrings(a, b, true);
}
ts.compareStringsCaseInsensitive = compareStringsCaseInsensitive;
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 = isString(text1) ? text1 : text1.messageText;
var string2 = isString(text2) ? text2 : text2.messageText;
var res = compareValues(string1, string2);
if (res) {
return res;
}
text1 = isString(text1) ? undefined : text1.next;
text2 = isString(text2) ? 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 = "/";
var directorySeparatorCharCode = 47;
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) {
return normalizePathAndParts(path).path;
}
ts.normalizePath = normalizePath;
function normalizePathAndParts(path) {
path = normalizeSlashes(path);
var rootLength = getRootLength(path);
var root = path.substr(0, rootLength);
var parts = getNormalizedParts(path, rootLength);
if (parts.length) {
var joinedParts = root + parts.join(ts.directorySeparator);
return { path: pathEndsWithDirectorySeparator(path) ? joinedParts + ts.directorySeparator : joinedParts, parts: parts };
}
else {
return { path: root, parts: parts };
}
}
ts.normalizePathAndParts = normalizePathAndParts;
function pathEndsWithDirectorySeparator(path) {
return path.charCodeAt(path.length - 1) === directorySeparatorCharCode;
}
ts.pathEndsWithDirectorySeparator = pathEndsWithDirectorySeparator;
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) && stringContains(path, "://");
}
ts.isUrl = isUrl;
function pathIsRelative(path) {
return /^\.\.?($|[\\/])/.test(path);
}
ts.pathIsRelative = pathIsRelative;
function moduleHasNonRelativeName(moduleName) {
return !ts.isExternalModuleNameRelative(moduleName);
}
ts.moduleHasNonRelativeName = moduleHasNonRelativeName;
function getEmitScriptTarget(compilerOptions) {
return compilerOptions.target || 0;
}
ts.getEmitScriptTarget = getEmitScriptTarget;
function getEmitModuleKind(compilerOptions) {
return typeof compilerOptions.module === "number" ?
compilerOptions.module :
getEmitScriptTarget(compilerOptions) >= 2 ? ts.ModuleKind.ES2015 : ts.ModuleKind.CommonJS;
}
ts.getEmitModuleKind = getEmitModuleKind;
function getEmitModuleResolutionKind(compilerOptions) {
var moduleResolution = compilerOptions.moduleResolution;
if (moduleResolution === undefined) {
moduleResolution = getEmitModuleKind(compilerOptions) === ts.ModuleKind.CommonJS ? ts.ModuleResolutionKind.NodeJs : ts.ModuleResolutionKind.Classic;
}
return moduleResolution;
}
ts.getEmitModuleResolutionKind = getEmitModuleResolutionKind;
function hasZeroOrOneAsteriskCharacter(str) {
var seenAsterisk = false;
for (var i = 0; i < str.length; i++) {
if (str.charCodeAt(i) === 42) {
if (!seenAsterisk) {
seenAsterisk = true;
}
else {
return false;
}
}
}
return true;
}
ts.hasZeroOrOneAsteriskCharacter = hasZeroOrOneAsteriskCharacter;
function isRootedDiskPath(path) {
return path && getRootLength(path) !== 0;
}
ts.isRootedDiskPath = isRootedDiskPath;
function convertToRelativePath(absoluteOrRelativePath, basePath, getCanonicalFileName) {
return !isRootedDiskPath(absoluteOrRelativePath)
? absoluteOrRelativePath
: getRelativePathToDirectoryOrUrl(basePath, absoluteOrRelativePath, basePath, getCanonicalFileName, false);
}
ts.convertToRelativePath = convertToRelativePath;
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.pop();
}
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 removeTrailingDirectorySeparator(path) {
if (path.charAt(path.length - 1) === ts.directorySeparator) {
return path.substr(0, path.length - 1);
}
return path;
}
ts.removeTrailingDirectorySeparator = removeTrailingDirectorySeparator;
function ensureTrailingDirectorySeparator(path) {
if (path.charAt(path.length - 1) !== ts.directorySeparator) {
return path + ts.directorySeparator;
}
return path;
}
ts.ensureTrailingDirectorySeparator = ensureTrailingDirectorySeparator;
function comparePaths(a, b, currentDirectory, ignoreCase) {
if (a === b)
return 0;
if (a === undefined)
return -1;
if (b === undefined)
return 1;
a = removeTrailingDirectorySeparator(a);
b = removeTrailingDirectorySeparator(b);
var aComponents = getNormalizedPathComponents(a, currentDirectory);
var bComponents = getNormalizedPathComponents(b, currentDirectory);
var sharedLength = Math.min(aComponents.length, bComponents.length);
for (var i = 0; i < sharedLength; i++) {
var result = compareStrings(aComponents[i], bComponents[i], ignoreCase);
if (result !== 0) {
return result;
}
}
return compareValues(aComponents.length, bComponents.length);
}
ts.comparePaths = comparePaths;
function containsPath(parent, child, currentDirectory, ignoreCase) {
if (parent === undefined || child === undefined)
return false;
if (parent === child)
return true;
parent = removeTrailingDirectorySeparator(parent);
child = removeTrailingDirectorySeparator(child);
if (parent === child)
return true;
var parentComponents = getNormalizedPathComponents(parent, currentDirectory);
var childComponents = getNormalizedPathComponents(child, currentDirectory);
if (childComponents.length < parentComponents.length) {
return false;
}
for (var i = 0; i < parentComponents.length; i++) {
var result = compareStrings(parentComponents[i], childComponents[i], ignoreCase);
if (result !== 0) {
return false;
}
}
return true;
}
ts.containsPath = containsPath;
function startsWith(str, prefix) {
return str.lastIndexOf(prefix, 0) === 0;
}
ts.startsWith = startsWith;
function removePrefix(str, prefix) {
return startsWith(str, prefix) ? str.substr(prefix.length) : str;
}
ts.removePrefix = removePrefix;
function endsWith(str, suffix) {
var expectedPos = str.length - suffix.length;
return expectedPos >= 0 && str.indexOf(suffix, expectedPos) === expectedPos;
}
ts.endsWith = endsWith;
function stringContains(str, substring) {
return str.indexOf(substring) !== -1;
}
ts.stringContains = stringContains;
function hasExtension(fileName) {
return stringContains(getBaseFileName(fileName), ".");
}
ts.hasExtension = hasExtension;
function fileExtensionIs(path, extension) {
return path.length > extension.length && endsWith(path, extension);
}
ts.fileExtensionIs = fileExtensionIs;
function fileExtensionIsOneOf(path, extensions) {
for (var _i = 0, extensions_1 = extensions; _i < extensions_1.length; _i++) {
var extension = extensions_1[_i];
if (fileExtensionIs(path, extension)) {
return true;
}
}
return false;
}
ts.fileExtensionIsOneOf = fileExtensionIsOneOf;
var reservedCharacterPattern = /[^\w\s\/]/g;
var wildcardCharCodes = [42, 63];
ts.commonPackageFolders = ["node_modules", "bower_components", "jspm_packages"];
var implicitExcludePathRegexPattern = "(?!(" + ts.commonPackageFolders.join("|") + ")(/|$))";
var filesMatcher = {
singleAsteriskRegexFragment: "([^./]|(\\.(?!min\\.js$))?)*",
doubleAsteriskRegexFragment: "(/" + implicitExcludePathRegexPattern + "[^/.][^/]*)*?",
replaceWildcardCharacter: function (match) { return replaceWildcardCharacter(match, filesMatcher.singleAsteriskRegexFragment); }
};
var directoriesMatcher = {
singleAsteriskRegexFragment: "[^/]*",
doubleAsteriskRegexFragment: "(/" + implicitExcludePathRegexPattern + "[^/.][^/]*)*?",
replaceWildcardCharacter: function (match) { return replaceWildcardCharacter(match, directoriesMatcher.singleAsteriskRegexFragment); }
};
var excludeMatcher = {
singleAsteriskRegexFragment: "[^/]*",
doubleAsteriskRegexFragment: "(/.+?)?",
replaceWildcardCharacter: function (match) { return replaceWildcardCharacter(match, excludeMatcher.singleAsteriskRegexFragment); }
};
var wildcardMatchers = {
files: filesMatcher,
directories: directoriesMatcher,
exclude: excludeMatcher
};
function getRegularExpressionForWildcard(specs, basePath, usage) {
var patterns = getRegularExpressionsForWildcards(specs, basePath, usage);
if (!patterns || !patterns.length) {
return undefined;
}
var pattern = patterns.map(function (pattern) { return "(" + pattern + ")"; }).join("|");
var terminator = usage === "exclude" ? "($|/)" : "$";
return "^(" + pattern + ")" + terminator;
}
ts.getRegularExpressionForWildcard = getRegularExpressionForWildcard;
function getRegularExpressionsForWildcards(specs, basePath, usage) {
if (specs === undefined || specs.length === 0) {
return undefined;
}
return flatMap(specs, function (spec) {
return spec && getSubPatternFromSpec(spec, basePath, usage, wildcardMatchers[usage]);
});
}
function isImplicitGlob(lastPathComponent) {
return !/[.*?]/.test(lastPathComponent);
}
ts.isImplicitGlob = isImplicitGlob;
function getSubPatternFromSpec(spec, basePath, usage, _a) {
var singleAsteriskRegexFragment = _a.singleAsteriskRegexFragment, doubleAsteriskRegexFragment = _a.doubleAsteriskRegexFragment, replaceWildcardCharacter = _a.replaceWildcardCharacter;
var subpattern = "";
var hasRecursiveDirectoryWildcard = false;
var hasWrittenComponent = false;
var components = getNormalizedPathComponents(spec, basePath);
var lastComponent = lastOrUndefined(components);
if (usage !== "exclude" && lastComponent === "**") {
return undefined;
}
components[0] = removeTrailingDirectorySeparator(components[0]);
if (isImplicitGlob(lastComponent)) {
components.push("**", "*");
}
var optionalCount = 0;
for (var _i = 0, components_1 = components; _i < components_1.length; _i++) {
var component = components_1[_i];
if (component === "**") {
if (hasRecursiveDirectoryWildcard) {
return undefined;
}
subpattern += doubleAsteriskRegexFragment;
hasRecursiveDirectoryWildcard = true;
}
else {
if (usage === "directories") {
subpattern += "(";
optionalCount++;
}
if (hasWrittenComponent) {
subpattern += ts.directorySeparator;
}
if (usage !== "exclude") {
var componentPattern = "";
if (component.charCodeAt(0) === 42) {
componentPattern += "([^./]" + singleAsteriskRegexFragment + ")?";
component = component.substr(1);
}
else if (component.charCodeAt(0) === 63) {
componentPattern += "[^./]";
component = component.substr(1);
}
componentPattern += component.replace(reservedCharacterPattern, replaceWildcardCharacter);
if (componentPattern !== component) {
subpattern += implicitExcludePathRegexPattern;
}
subpattern += componentPattern;
}
else {
subpattern += component.replace(reservedCharacterPattern, replaceWildcardCharacter);
}
}
hasWrittenComponent = true;
}
while (optionalCount > 0) {
subpattern += ")?";
optionalCount--;
}
return subpattern;
}
function replaceWildcardCharacter(match, singleAsteriskRegexFragment) {
return match === "*" ? singleAsteriskRegexFragment : match === "?" ? "[^/]" : "\\" + match;
}
function getFileMatcherPatterns(path, excludes, includes, useCaseSensitiveFileNames, currentDirectory) {
path = normalizePath(path);
currentDirectory = normalizePath(currentDirectory);
var absolutePath = combinePaths(currentDirectory, path);
return {
includeFilePatterns: map(getRegularExpressionsForWildcards(includes, absolutePath, "files"), function (pattern) { return "^" + pattern + "$"; }),
includeFilePattern: getRegularExpressionForWildcard(includes, absolutePath, "files"),
includeDirectoryPattern: getRegularExpressionForWildcard(includes, absolutePath, "directories"),
excludePattern: getRegularExpressionForWildcard(excludes, absolutePath, "exclude"),
basePaths: getBasePaths(path, includes, useCaseSensitiveFileNames)
};
}
ts.getFileMatcherPatterns = getFileMatcherPatterns;
function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, currentDirectory, depth, getFileSystemEntries) {
path = normalizePath(path);
currentDirectory = normalizePath(currentDirectory);
var patterns = getFileMatcherPatterns(path, excludes, includes, useCaseSensitiveFileNames, currentDirectory);
var regexFlag = useCaseSensitiveFileNames ? "" : "i";
var includeFileRegexes = patterns.includeFilePatterns && patterns.includeFilePatterns.map(function (pattern) { return new RegExp(pattern, regexFlag); });
var includeDirectoryRegex = patterns.includeDirectoryPattern && new RegExp(patterns.includeDirectoryPattern, regexFlag);
var excludeRegex = patterns.excludePattern && new RegExp(patterns.excludePattern, regexFlag);
var results = includeFileRegexes ? includeFileRegexes.map(function () { return []; }) : [[]];
var comparer = useCaseSensitiveFileNames ? compareStrings : compareStringsCaseInsensitive;
for (var _i = 0, _a = patterns.basePaths; _i < _a.length; _i++) {
var basePath = _a[_i];
visitDirectory(basePath, combinePaths(currentDirectory, basePath), depth);
}
return flatten(results);
function visitDirectory(path, absolutePath, depth) {
var _a = getFileSystemEntries(path), files = _a.files, directories = _a.directories;
files = files.slice().sort(comparer);
var _loop_1 = function (current) {
var name = combinePaths(path, current);
var absoluteName = combinePaths(absolutePath, current);
if (extensions && !fileExtensionIsOneOf(name, extensions))
return "continue";
if (excludeRegex && excludeRegex.test(absoluteName))
return "continue";
if (!includeFileRegexes) {
results[0].push(name);
}
else {
var includeIndex = findIndex(includeFileRegexes, function (re) { return re.test(absoluteName); });
if (includeIndex !== -1) {
results[includeIndex].push(name);
}
}
};
for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {
var current = files_1[_i];
_loop_1(current);
}
if (depth !== undefined) {
depth--;
if (depth === 0) {
return;
}
}
directories = directories.slice().sort(comparer);
for (var _b = 0, directories_1 = directories; _b < directories_1.length; _b++) {
var current = directories_1[_b];
var name = combinePaths(path, current);
var absoluteName = combinePaths(absolutePath, current);
if ((!includeDirectoryRegex || includeDirectoryRegex.test(absoluteName)) &&
(!excludeRegex || !excludeRegex.test(absoluteName))) {
visitDirectory(name, absoluteName, depth);
}
}
}
}
ts.matchFiles = matchFiles;
function getBasePaths(path, includes, useCaseSensitiveFileNames) {
var basePaths = [path];
if (includes) {
var includeBasePaths = [];
for (var _i = 0, includes_1 = includes; _i < includes_1.length; _i++) {
var include = includes_1[_i];
var absolute = isRootedDiskPath(include) ? include : normalizePath(combinePaths(path, include));
includeBasePaths.push(getIncludeBasePath(absolute));
}
includeBasePaths.sort(useCaseSensitiveFileNames ? compareStrings : compareStringsCaseInsensitive);
var _loop_2 = function (includeBasePath) {
if (ts.every(basePaths, function (basePath) { return !containsPath(basePath, includeBasePath, path, !useCaseSensitiveFileNames); })) {
basePaths.push(includeBasePath);
}
};
for (var _a = 0, includeBasePaths_1 = includeBasePaths; _a < includeBasePaths_1.length; _a++) {
var includeBasePath = includeBasePaths_1[_a];
_loop_2(includeBasePath);
}
}
return basePaths;
}
function getIncludeBasePath(absolute) {
var wildcardOffset = indexOfAnyCharCode(absolute, wildcardCharCodes);
if (wildcardOffset < 0) {
return !hasExtension(absolute)
? absolute
: removeTrailingDirectorySeparator(getDirectoryPath(absolute));
}
return absolute.substring(0, absolute.lastIndexOf(ts.directorySeparator, wildcardOffset));
}
function ensureScriptKind(fileName, scriptKind) {
return scriptKind || getScriptKindFromFileName(fileName) || 3;
}
ts.ensureScriptKind = ensureScriptKind;
function getScriptKindFromFileName(fileName) {
var ext = fileName.substr(fileName.lastIndexOf("."));
switch (ext.toLowerCase()) {
case ".js":
return 1;
case ".jsx":
return 2;
case ".ts":
return 3;
case ".tsx":
return 4;
case ".json":
return 6;
default:
return 0;
}
}
ts.getScriptKindFromFileName = getScriptKindFromFileName;
ts.supportedTypeScriptExtensions = [".ts", ".tsx", ".d.ts"];
ts.supportedTypescriptExtensionsForExtractExtension = [".d.ts", ".ts", ".tsx"];
ts.supportedJavascriptExtensions = [".js", ".jsx"];
var allSupportedExtensions = ts.supportedTypeScriptExtensions.concat(ts.supportedJavascriptExtensions);
function getSupportedExtensions(options, extraFileExtensions) {
var needAllExtensions = options && options.allowJs;
if (!extraFileExtensions || extraFileExtensions.length === 0 || !needAllExtensions) {
return needAllExtensions ? allSupportedExtensions : ts.supportedTypeScriptExtensions;
}
return deduplicate(allSupportedExtensions.concat(extraFileExtensions.map(function (e) { return e.extension; })));
}
ts.getSupportedExtensions = getSupportedExtensions;
function hasJavaScriptFileExtension(fileName) {
return forEach(ts.supportedJavascriptExtensions, function (extension) { return fileExtensionIs(fileName, extension); });
}
ts.hasJavaScriptFileExtension = hasJavaScriptFileExtension;
function hasTypeScriptFileExtension(fileName) {
return forEach(ts.supportedTypeScriptExtensions, function (extension) { return fileExtensionIs(fileName, extension); });
}
ts.hasTypeScriptFileExtension = hasTypeScriptFileExtension;
function isSupportedSourceFileName(fileName, compilerOptions, extraFileExtensions) {
if (!fileName) {
return false;
}
for (var _i = 0, _a = getSupportedExtensions(compilerOptions, extraFileExtensions); _i < _a.length; _i++) {
var extension = _a[_i];
if (fileExtensionIs(fileName, extension)) {
return true;
}
}
return false;
}
ts.isSupportedSourceFileName = isSupportedSourceFileName;
function getExtensionPriority(path, supportedExtensions) {
for (var i = supportedExtensions.length - 1; i >= 0; i--) {
if (fileExtensionIs(path, supportedExtensions[i])) {
return adjustExtensionPriority(i, supportedExtensions);
}
}
return 0;
}
ts.getExtensionPriority = getExtensionPriority;
function adjustExtensionPriority(extensionPriority, supportedExtensions) {
if (extensionPriority < 2) {
return 0;
}
else if (extensionPriority < supportedExtensions.length) {
return 2;
}
else {
return supportedExtensions.length;
}
}
ts.adjustExtensionPriority = adjustExtensionPriority;
function getNextLowestExtensionPriority(extensionPriority, supportedExtensions) {
if (extensionPriority < 2) {
return 2;
}
else {
return supportedExtensions.length;
}
}
ts.getNextLowestExtensionPriority = getNextLowestExtensionPriority;
var extensionsToRemove = [".d.ts", ".ts", ".js", ".tsx", ".jsx"];
function removeFileExtension(path) {
for (var _i = 0, extensionsToRemove_1 = extensionsToRemove; _i < extensionsToRemove_1.length; _i++) {
var ext = extensionsToRemove_1[_i];
var extensionless = tryRemoveExtension(path, ext);
if (extensionless !== undefined) {
return extensionless;
}
}
return path;
}
ts.removeFileExtension = removeFileExtension;
function tryRemoveExtension(path, extension) {
return fileExtensionIs(path, extension) ? removeExtension(path, extension) : undefined;
}
ts.tryRemoveExtension = tryRemoveExtension;
function removeExtension(path, extension) {
return path.substring(0, path.length - extension.length);
}
ts.removeExtension = removeExtension;
function changeExtension(path, newExtension) {
return (removeFileExtension(path) + newExtension);
}
ts.changeExtension = changeExtension;
function Symbol(flags, name) {
this.flags = flags;
this.escapedName = name;
this.declarations = undefined;
}
function Type(checker, flags) {
this.flags = flags;
if (Debug.isDebugging) {
this.checker = checker;
}
}
function Signature() {
}
function Node(kind, pos, end) {
this.id = 0;
this.kind = kind;
this.pos = pos;
this.end = end;
this.flags = 0;
this.modifierFlagsCache = 0;
this.transformFlags = 0;
this.parent = undefined;
this.original = undefined;
}
function SourceMapSource(fileName, text, skipTrivia) {
this.fileName = fileName;
this.text = text;
this.skipTrivia = skipTrivia || (function (pos) { return pos; });
}
ts.objectAllocator = {
getNodeConstructor: function () { return Node; },
getTokenConstructor: function () { return Node; },
getIdentifierConstructor: function () { return Node; },
getSourceFileConstructor: function () { return Node; },
getSymbolConstructor: function () { return Symbol; },
getTypeConstructor: function () { return Type; },
getSignatureConstructor: function () { return Signature; },
getSourceMapSourceConstructor: function () { return SourceMapSource; },
};
var Debug;
(function (Debug) {
Debug.currentAssertionLevel = 0;
Debug.isDebugging = false;
function shouldAssert(level) {
return Debug.currentAssertionLevel >= level;
}
Debug.shouldAssert = shouldAssert;
function assert(expression, message, verboseDebugInfo, stackCrawlMark) {
if (!expression) {
if (verboseDebugInfo) {
message += "\r\nVerbose Debug Information: " + (typeof verboseDebugInfo === "string" ? verboseDebugInfo : verboseDebugInfo());
}
fail(message ? "False expression: " + message : "False expression.", stackCrawlMark || assert);
}
}
Debug.assert = assert;
function assertEqual(a, b, msg, msg2) {
if (a !== b) {
var message = msg ? msg2 ? msg + " " + msg2 : msg : "";
fail("Expected " + a + " === " + b + ". " + message);
}
}
Debug.assertEqual = assertEqual;
function assertLessThan(a, b, msg) {
if (a >= b) {
fail("Expected " + a + " < " + b + ". " + (msg || ""));
}
}
Debug.assertLessThan = assertLessThan;
function assertLessThanOrEqual(a, b) {
if (a > b) {
fail("Expected " + a + " <= " + b);
}
}
Debug.assertLessThanOrEqual = assertLessThanOrEqual;
function assertGreaterThanOrEqual(a, b) {
if (a < b) {
fail("Expected " + a + " >= " + b);
}
}
Debug.assertGreaterThanOrEqual = assertGreaterThanOrEqual;
function fail(message, stackCrawlMark) {
debugger;
var e = new Error(message ? "Debug Failure. " + message : "Debug Failure.");
if (Error.captureStackTrace) {
Error.captureStackTrace(e, stackCrawlMark || fail);
}
throw e;
}
Debug.fail = fail;
function assertNever(member, message, stackCrawlMark) {
return fail(message || "Illegal value: " + member, stackCrawlMark || assertNever);
}
Debug.assertNever = assertNever;
function getFunctionName(func) {
if (typeof func !== "function") {
return "";
}
else if (func.hasOwnProperty("name")) {
return func.name;
}
else {
var text = Function.prototype.toString.call(func);
var match = /^function\s+([\w\$]+)\s*\(/.exec(text);
return match ? match[1] : "";
}
}
Debug.getFunctionName = getFunctionName;
})(Debug = ts.Debug || (ts.Debug = {}));
function orderedRemoveItem(array, item) {
for (var i = 0; i < array.length; i++) {
if (array[i] === item) {
orderedRemoveItemAt(array, i);
return true;
}
}
return false;
}
ts.orderedRemoveItem = orderedRemoveItem;
function orderedRemoveItemAt(array, index) {
for (var i = index; i < array.length - 1; i++) {
array[i] = array[i + 1];
}
array.pop();
}
ts.orderedRemoveItemAt = orderedRemoveItemAt;
function unorderedRemoveItemAt(array, index) {
array[index] = array[array.length - 1];
array.pop();
}
ts.unorderedRemoveItemAt = unorderedRemoveItemAt;
function unorderedRemoveItem(array, item) {
unorderedRemoveFirstItemWhere(array, function (element) { return element === item; });
}
ts.unorderedRemoveItem = unorderedRemoveItem;
function unorderedRemoveFirstItemWhere(array, predicate) {
for (var i = 0; i < array.length; i++) {
if (predicate(array[i])) {
unorderedRemoveItemAt(array, i);
break;
}
}
}
function createGetCanonicalFileName(useCaseSensitiveFileNames) {
return useCaseSensitiveFileNames
? (function (fileName) { return fileName; })
: (function (fileName) { return fileName.toLowerCase(); });
}
ts.createGetCanonicalFileName = createGetCanonicalFileName;
function matchPatternOrExact(patternStrings, candidate) {
var patterns = [];
for (var _i = 0, patternStrings_1 = patternStrings; _i < patternStrings_1.length; _i++) {
var patternString = patternStrings_1[_i];
var pattern = tryParsePattern(patternString);
if (pattern) {
patterns.push(pattern);
}
else if (patternString === candidate) {
return patternString;
}
}
return findBestPatternMatch(patterns, function (_) { return _; }, candidate);
}
ts.matchPatternOrExact = matchPatternOrExact;
function patternText(_a) {
var prefix = _a.prefix, suffix = _a.suffix;
return prefix + "*" + suffix;
}
ts.patternText = patternText;
function matchedText(pattern, candidate) {
Debug.assert(isPatternMatch(pattern, candidate));
return candidate.substr(pattern.prefix.length, candidate.length - pattern.suffix.length);
}
ts.matchedText = matchedText;
function findBestPatternMatch(values, getPattern, candidate) {
var matchedValue = undefined;
var longestMatchPrefixLength = -1;
for (var _i = 0, values_1 = values; _i < values_1.length; _i++) {
var v = values_1[_i];
var pattern = getPattern(v);
if (isPatternMatch(pattern, candidate) && pattern.prefix.length > longestMatchPrefixLength) {
longestMatchPrefixLength = pattern.prefix.length;
matchedValue = v;
}
}
return matchedValue;
}
ts.findBestPatternMatch = findBestPatternMatch;
function isPatternMatch(_a, candidate) {
var prefix = _a.prefix, suffix = _a.suffix;
return candidate.length >= prefix.length + suffix.length &&
startsWith(candidate, prefix) &&
endsWith(candidate, suffix);
}
function tryParsePattern(pattern) {
Debug.assert(hasZeroOrOneAsteriskCharacter(pattern));
var indexOfStar = pattern.indexOf("*");
return indexOfStar === -1 ? undefined : {
prefix: pattern.substr(0, indexOfStar),
suffix: pattern.substr(indexOfStar + 1)
};
}
ts.tryParsePattern = tryParsePattern;
function positionIsSynthesized(pos) {
return !(pos >= 0);
}
ts.positionIsSynthesized = positionIsSynthesized;
function extensionIsTypeScript(ext) {
return ext === ".ts" || ext === ".tsx" || ext === ".d.ts";
}
ts.extensionIsTypeScript = extensionIsTypeScript;
function extensionFromPath(path) {
var ext = tryGetExtensionFromPath(path);
if (ext !== undefined) {
return ext;
}
Debug.fail("File " + path + " has unknown extension.");
}
ts.extensionFromPath = extensionFromPath;
function isAnySupportedFileExtension(path) {
return tryGetExtensionFromPath(path) !== undefined;
}
ts.isAnySupportedFileExtension = isAnySupportedFileExtension;
function tryGetExtensionFromPath(path) {
return find(ts.supportedTypescriptExtensionsForExtractExtension, function (e) { return fileExtensionIs(path, e); }) || find(ts.supportedJavascriptExtensions, function (e) { return fileExtensionIs(path, e); });
}
ts.tryGetExtensionFromPath = tryGetExtensionFromPath;
function getAnyExtensionFromPath(path) {
var baseFileName = getBaseFileName(path);
var extensionIndex = baseFileName.lastIndexOf(".");
if (extensionIndex >= 0) {
return baseFileName.substring(extensionIndex);
}
}
ts.getAnyExtensionFromPath = getAnyExtensionFromPath;
function isCheckJsEnabledForFile(sourceFile, compilerOptions) {
return sourceFile.checkJsDirective ? sourceFile.checkJsDirective.enabled : compilerOptions.checkJs;
}
ts.isCheckJsEnabledForFile = isCheckJsEnabledForFile;
function and(f, g) {
return function (arg) { return f(arg) && g(arg); };
}
ts.and = and;
function assertTypeIsNever(_) { }
ts.assertTypeIsNever = assertTypeIsNever;
function createCachedDirectoryStructureHost(host) {
var cachedReadDirectoryResult = createMap();
var getCurrentDirectory = memoize(function () { return host.getCurrentDirectory(); });
var getCanonicalFileName = createGetCanonicalFileName(host.useCaseSensitiveFileNames);
return {
useCaseSensitiveFileNames: host.useCaseSensitiveFileNames,
newLine: host.newLine,
readFile: function (path, encoding) { return host.readFile(path, encoding); },
write: function (s) { return host.write(s); },
writeFile: writeFile,
fileExists: fileExists,
directoryExists: directoryExists,
createDirectory: createDirectory,
getCurrentDirectory: getCurrentDirectory,
getDirectories: getDirectories,
readDirectory: readDirectory,
addOrDeleteFileOrDirectory: addOrDeleteFileOrDirectory,
addOrDeleteFile: addOrDeleteFile,
clearCache: clearCache,
exit: function (code) { return host.exit(code); }
};
function toPath(fileName) {
return ts.toPath(fileName, getCurrentDirectory(), getCanonicalFileName);
}
function getCachedFileSystemEntries(rootDirPath) {
return cachedReadDirectoryResult.get(rootDirPath);
}
function getCachedFileSystemEntriesForBaseDir(path) {
return getCachedFileSystemEntries(getDirectoryPath(path));
}
function getBaseNameOfFileName(fileName) {
return getBaseFileName(normalizePath(fileName));
}
function createCachedFileSystemEntries(rootDir, rootDirPath) {
var resultFromHost = {
files: map(host.readDirectory(rootDir, undefined, undefined, ["*.*"]), getBaseNameOfFileName) || [],
directories: host.getDirectories(rootDir) || []
};
cachedReadDirectoryResult.set(rootDirPath, resultFromHost);
return resultFromHost;
}
function tryReadDirectory(rootDir, rootDirPath) {
var cachedResult = getCachedFileSystemEntries(rootDirPath);
if (cachedResult) {
return cachedResult;
}
try {
return createCachedFileSystemEntries(rootDir, rootDirPath);
}
catch (_e) {
Debug.assert(!cachedReadDirectoryResult.has(rootDirPath));
return undefined;
}
}
function fileNameEqual(name1, name2) {
return getCanonicalFileName(name1) === getCanonicalFileName(name2);
}
function hasEntry(entries, name) {
return some(entries, function (file) { return fileNameEqual(file, name); });
}
function updateFileSystemEntry(entries, baseName, isValid) {
if (hasEntry(entries, baseName)) {
if (!isValid) {
return filterMutate(entries, function (entry) { return !fileNameEqual(entry, baseName); });
}
}
else if (isValid) {
return entries.push(baseName);
}
}
function writeFile(fileName, data, writeByteOrderMark) {
var path = toPath(fileName);
var result = getCachedFileSystemEntriesForBaseDir(path);
if (result) {
updateFilesOfFileSystemEntry(result, getBaseNameOfFileName(fileName), true);
}
return host.writeFile(fileName, data, writeByteOrderMark);
}
function fileExists(fileName) {
var path = toPath(fileName);
var result = getCachedFileSystemEntriesForBaseDir(path);
return result && hasEntry(result.files, getBaseNameOfFileName(fileName)) ||
host.fileExists(fileName);
}
function directoryExists(dirPath) {
var path = toPath(dirPath);
return cachedReadDirectoryResult.has(path) || host.directoryExists(dirPath);
}
function createDirectory(dirPath) {
var path = toPath(dirPath);
var result = getCachedFileSystemEntriesForBaseDir(path);
var baseFileName = getBaseNameOfFileName(dirPath);
if (result) {
updateFileSystemEntry(result.directories, baseFileName, true);
}
host.createDirectory(dirPath);
}
function getDirectories(rootDir) {
var rootDirPath = toPath(rootDir);
var result = tryReadDirectory(rootDir, rootDirPath);
if (result) {
return result.directories.slice();
}
return host.getDirectories(rootDir);
}
function readDirectory(rootDir, extensions, excludes, includes, depth) {
var rootDirPath = toPath(rootDir);
var result = tryReadDirectory(rootDir, rootDirPath);
if (result) {
return matchFiles(rootDir, extensions, excludes, includes, host.useCaseSensitiveFileNames, getCurrentDirectory(), depth, getFileSystemEntries);
}
return host.readDirectory(rootDir, extensions, excludes, includes, depth);
function getFileSystemEntries(dir) {
var path = toPath(dir);
if (path === rootDirPath) {
return result;
}
return getCachedFileSystemEntries(path) || createCachedFileSystemEntries(dir, path);
}
}
function addOrDeleteFileOrDirectory(fileOrDirectory, fileOrDirectoryPath) {
var existingResult = getCachedFileSystemEntries(fileOrDirectoryPath);
if (existingResult) {
if (!host.directoryExists(fileOrDirectory)) {
cachedReadDirectoryResult.delete(fileOrDirectoryPath);
}
}
else {
var parentResult = getCachedFileSystemEntriesForBaseDir(fileOrDirectoryPath);
if (parentResult) {
var baseName = getBaseNameOfFileName(fileOrDirectory);
if (parentResult) {
var fsQueryResult = {
fileExists: host.fileExists(fileOrDirectoryPath),
directoryExists: host.directoryExists(fileOrDirectoryPath)
};
updateFilesOfFileSystemEntry(parentResult, baseName, fsQueryResult.fileExists);
updateFileSystemEntry(parentResult.directories, baseName, fsQueryResult.directoryExists);
return fsQueryResult;
}
}
}
}
function addOrDeleteFile(fileName, filePath, eventKind) {
if (eventKind === ts.FileWatcherEventKind.Changed) {
return;
}
var parentResult = getCachedFileSystemEntriesForBaseDir(filePath);
if (parentResult) {
updateFilesOfFileSystemEntry(parentResult, getBaseNameOfFileName(fileName), eventKind === ts.FileWatcherEventKind.Created);
}
}
function updateFilesOfFileSystemEntry(parentResult, baseName, fileExists) {
updateFileSystemEntry(parentResult.files, baseName, fileExists);
}
function clearCache() {
cachedReadDirectoryResult.clear();
}
}
ts.createCachedDirectoryStructureHost = createCachedDirectoryStructureHost;
})(ts || (ts = {}));
var ts;
(function (ts) {
function setStackTraceLimit() {
if (Error.stackTraceLimit < 100) {
Error.stackTraceLimit = 100;
}
}
ts.setStackTraceLimit = setStackTraceLimit;
var FileWatcherEventKind;
(function (FileWatcherEventKind) {
FileWatcherEventKind[FileWatcherEventKind["Created"] = 0] = "Created";
FileWatcherEventKind[FileWatcherEventKind["Changed"] = 1] = "Changed";
FileWatcherEventKind[FileWatcherEventKind["Deleted"] = 2] = "Deleted";
})(FileWatcherEventKind = ts.FileWatcherEventKind || (ts.FileWatcherEventKind = {}));
function getNodeMajorVersion() {
if (typeof process === "undefined") {
return undefined;
}
var version = process.version;
if (!version) {
return undefined;
}
var dot = version.indexOf(".");
if (dot === -1) {
return undefined;
}
return parseInt(version.substring(1, dot));
}
ts.getNodeMajorVersion = getNodeMajorVersion;
ts.sys = (function () {
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 = ts.createMap();
var fileWatcherCallbacks = ts.createMultiMap();
return { addFile: addFile, removeFile: removeFile };
function reduceDirWatcherRefCountForFile(fileName) {
var dirName = ts.getDirectoryPath(fileName);
var watcher = dirWatchers.get(dirName);
if (watcher) {
watcher.referenceCount -= 1;
if (watcher.referenceCount <= 0) {
watcher.close();
dirWatchers.delete(dirName);
}
}
}
function addDirWatcher(dirPath) {
var watcher = dirWatchers.get(dirPath);
if (watcher) {
watcher.referenceCount += 1;
return;
}
watcher = fsWatchDirectory(dirPath || ".", function (eventName, relativeFileName) { return fileEventHandler(eventName, relativeFileName, dirPath); });
watcher.referenceCount = 1;
dirWatchers.set(dirPath, watcher);
return;
}
function addFileWatcherCallback(filePath, callback) {
fileWatcherCallbacks.add(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) {
fileWatcherCallbacks.remove(filePath, callback);
}
function fileEventHandler(eventName, relativeFileName, baseDirPath) {
var fileName = !ts.isString(relativeFileName)
? undefined
: ts.getNormalizedAbsolutePath(relativeFileName, baseDirPath);
if ((eventName === "change" || eventName === "rename")) {
var callbacks = fileWatcherCallbacks.get(fileName);
if (callbacks) {
for (var _i = 0, callbacks_1 = callbacks; _i < callbacks_1.length; _i++) {
var fileCallback = callbacks_1[_i];
fileCallback(fileName, FileWatcherEventKind.Changed);
}
}
}
}
}
var watchedFileSet = createWatchedFileSet();
var nodeVersion = getNodeMajorVersion();
var isNode4OrLater = nodeVersion >= 4;
function isFileSystemCaseSensitive() {
if (platform === "win32" || platform === "win64") {
return false;
}
return !fileExists(swapCase(__filename));
}
function swapCase(s) {
return s.replace(/\w/g, function (ch) {
var up = ch.toUpperCase();
return ch === up ? ch.toLowerCase() : up;
});
}
var platform = _os.platform();
var useCaseSensitiveFileNames = isFileSystemCaseSensitive();
function fsWatchFile(fileName, callback, pollingInterval) {
_fs.watchFile(fileName, { persistent: true, interval: pollingInterval || 250 }, fileChanged);
return {
close: function () { return _fs.unwatchFile(fileName, fileChanged); }
};
function fileChanged(curr, prev) {
var isCurrZero = +curr.mtime === 0;
var isPrevZero = +prev.mtime === 0;
var created = !isCurrZero && isPrevZero;
var deleted = isCurrZero && !isPrevZero;
var eventKind = created
? FileWatcherEventKind.Created
: deleted
? FileWatcherEventKind.Deleted
: FileWatcherEventKind.Changed;
if (eventKind === FileWatcherEventKind.Changed && +curr.mtime <= +prev.mtime) {
return;
}
callback(fileName, eventKind);
}
}
function fsWatchDirectory(directoryName, callback, recursive) {
var options;
var watcher = !directoryExists(directoryName) ?
watchMissingDirectory() :
watchPresentDirectory();
return {
close: function () {
watcher.close();
}
};
function watchPresentDirectory() {
if (options === undefined) {
if (isNode4OrLater && (process.platform === "win32" || process.platform === "darwin")) {
options = { persistent: true, recursive: !!recursive };
}
else {
options = { persistent: true };
}
}
var dirWatcher = _fs.watch(directoryName, options, callback);
dirWatcher.on("error", function () {
if (!directoryExists(directoryName)) {
watcher = watchMissingDirectory();
callback("rename", "");
}
});
return dirWatcher;
}
function watchMissingDirectory() {
return fsWatchFile(directoryName, function (_fileName, eventKind) {
if (eventKind === FileWatcherEventKind.Created && directoryExists(directoryName)) {
watcher.close();
watcher = watchPresentDirectory();
callback("rename", "");
}
});
}
}
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 getAccessibleFileSystemEntries(path) {
try {
var entries = _fs.readdirSync(path || ".").sort();
var files = [];
var directories = [];
for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {
var entry = entries_1[_i];
if (entry === "." || entry === "..") {
continue;
}
var name = ts.combinePaths(path, entry);
var stat = void 0;
try {
stat = _fs.statSync(name);
}
catch (e) {
continue;
}
if (stat.isFile()) {
files.push(entry);
}
else if (stat.isDirectory()) {
directories.push(entry);
}
}
return { files: files, directories: directories };
}
catch (e) {
return { files: [], directories: [] };
}
}
function readDirectory(path, extensions, excludes, includes, depth) {
return ts.matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames, process.cwd(), depth, getAccessibleFileSystemEntries);
}
function fileSystemEntryExists(path, entryKind) {
try {
var stat = _fs.statSync(path);
switch (entryKind) {
case 0: return stat.isFile();
case 1: return stat.isDirectory();
}
}
catch (e) {
return false;
}
}
function fileExists(path) {
return fileSystemEntryExists(path, 0);
}
function directoryExists(path) {
return fileSystemEntryExists(path, 1);
}
function getDirectories(path) {
return ts.filter(_fs.readdirSync(path), function (dir) { return fileSystemEntryExists(ts.combinePaths(path, dir), 1); });
}
var nodeSystem = {
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, pollingInterval) {
if (useNonPollingWatchers) {
var watchedFile_1 = watchedFileSet.addFile(fileName, callback);
return {
close: function () { return watchedFileSet.removeFile(watchedFile_1); }
};
}
else {
return fsWatchFile(fileName, callback, pollingInterval);
}
},
watchDirectory: function (directoryName, callback, recursive) {
return fsWatchDirectory(directoryName, function (eventName, relativeFileName) {
if (eventName === "rename") {
callback(!relativeFileName ? relativeFileName : ts.normalizePath(ts.combinePaths(directoryName, relativeFileName)));
}
}, recursive);
},
resolvePath: function (path) { return _path.resolve(path); },
fileExists: fileExists,
directoryExists: directoryExists,
createDirectory: function (directoryName) {
if (!nodeSystem.directoryExists(directoryName)) {
_fs.mkdirSync(directoryName);
}
},
getExecutingFilePath: function () {
return __filename;
},
getCurrentDirectory: function () {
return process.cwd();
},
getDirectories: getDirectories,
getEnvironmentVariable: function (name) {
return process.env[name] || "";
},
readDirectory: readDirectory,
getModifiedTime: 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;
},
getFileSize: function (path) {
try {
var stat = _fs.statSync(path);
if (stat.isFile()) {
return stat.size;
}
}
catch (e) { }
return 0;
},
exit: function (exitCode) {
process.exit(exitCode);
},
realpath: function (path) {
return _fs.realpathSync(path);
},
debugMode: ts.some(process.execArgv, function (arg) { return /^--(inspect|debug)(-brk)?(=\d+)?$/i.test(arg); }),
tryEnableSourceMapsForHost: function () {
try {
require("source-map-support").install();
}
catch (e) {
}
},
setTimeout: setTimeout,
clearTimeout: clearTimeout
};
return nodeSystem;
}
function getChakraSystem() {
var realpath = ChakraHost.realpath && (function (path) { return ChakraHost.realpath(path); });
return {
newLine: ChakraHost.newLine || "\r\n",
args: ChakraHost.args,
useCaseSensitiveFileNames: !!ChakraHost.useCaseSensitiveFileNames,
write: ChakraHost.echo,
readFile: function (path, _encoding) {
return ChakraHost.readFile(path);
},
writeFile: function (path, data, writeByteOrderMark) {
if (writeByteOrderMark) {
data = "\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; },
getDirectories: ChakraHost.getDirectories,
getEnvironmentVariable: ChakraHost.getEnvironmentVariable || (function () { return ""; }),
readDirectory: function (path, extensions, excludes, includes, _depth) {
var pattern = ts.getFileMatcherPatterns(path, excludes, includes, !!ChakraHost.useCaseSensitiveFileNames, ChakraHost.currentDirectory);
return ChakraHost.readDirectory(path, extensions, pattern.basePaths, pattern.excludePattern, pattern.includeFilePattern, pattern.includeDirectoryPattern);
},
exit: ChakraHost.quit,
realpath: realpath
};
}
function recursiveCreateDirectory(directoryPath, sys) {
var basePath = ts.getDirectoryPath(directoryPath);
var shouldCreateParent = basePath !== "" && directoryPath !== basePath && !sys.directoryExists(basePath);
if (shouldCreateParent) {
recursiveCreateDirectory(basePath, sys);
}
if (shouldCreateParent || !sys.directoryExists(directoryPath)) {
sys.createDirectory(directoryPath);
}
}
var sys;
if (typeof ChakraHost !== "undefined") {
sys = getChakraSystem();
}
else if (typeof process !== "undefined" && process.nextTick && !process.browser && typeof require !== "undefined") {
sys = getNodeSystem();
}
if (sys) {
var originalWriteFile_1 = sys.writeFile;
sys.writeFile = function (path, data, writeBom) {
var directoryPath = ts.getDirectoryPath(ts.normalizeSlashes(path));
if (directoryPath && !sys.directoryExists(directoryPath)) {
recursiveCreateDirectory(directoryPath, sys);
}
originalWriteFile_1.call(sys, path, data, writeBom);
};
}
return sys;
})();
if (ts.sys && ts.sys.getEnvironmentVariable) {
ts.Debug.currentAssertionLevel = /^development$/i.test(ts.sys.getEnvironmentVariable("NODE_ENV"))
? 1
: 0;
}
if (ts.sys && ts.sys.debugMode) {
ts.Debug.isDebugging = true;
}
})(ts || (ts = {}));
var ts;
(function (ts) {
function diag(code, category, key, message) {
return { code: code, category: category, key: key, message: message };
}
ts.Diagnostics = {
Unterminated_string_literal: diag(1002, ts.DiagnosticCategory.Error, "Unterminated_string_literal_1002", "Unterminated string literal."),
Identifier_expected: diag(1003, ts.DiagnosticCategory.Error, "Identifier_expected_1003", "Identifier expected."),
_0_expected: diag(1005, ts.DiagnosticCategory.Error, "_0_expected_1005", "'{0}' expected."),
A_file_cannot_have_a_reference_to_itself: diag(1006, ts.DiagnosticCategory.Error, "A_file_cannot_have_a_reference_to_itself_1006", "A file cannot have a reference to itself."),
Trailing_comma_not_allowed: diag(1009, ts.DiagnosticCategory.Error, "Trailing_comma_not_allowed_1009", "Trailing comma not allowed."),
Asterisk_Slash_expected: diag(1010, ts.DiagnosticCategory.Error, "Asterisk_Slash_expected_1010", "'*/' expected."),
Unexpected_token: diag(1012, ts.DiagnosticCategory.Error, "Unexpected_token_1012", "Unexpected token."),
A_rest_parameter_must_be_last_in_a_parameter_list: diag(1014, ts.DiagnosticCategory.Error, "A_rest_parameter_must_be_last_in_a_parameter_list_1014", "A rest parameter must be last in a parameter list."),
Parameter_cannot_have_question_mark_and_initializer: diag(1015, ts.DiagnosticCategory.Error, "Parameter_cannot_have_question_mark_and_initializer_1015", "Parameter cannot have question mark and initializer."),
A_required_parameter_cannot_follow_an_optional_parameter: diag(1016, ts.DiagnosticCategory.Error, "A_required_parameter_cannot_follow_an_optional_parameter_1016", "A required parameter cannot follow an optional parameter."),
An_index_signature_cannot_have_a_rest_parameter: diag(1017, ts.DiagnosticCategory.Error, "An_index_signature_cannot_have_a_rest_parameter_1017", "An index signature cannot have a rest parameter."),
An_index_signature_parameter_cannot_have_an_accessibility_modifier: diag(1018, ts.DiagnosticCategory.Error, "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018", "An index signature parameter cannot have an accessibility modifier."),
An_index_signature_parameter_cannot_have_a_question_mark: diag(1019, ts.DiagnosticCategory.Error, "An_index_signature_parameter_cannot_have_a_question_mark_1019", "An index signature parameter cannot have a question mark."),
An_index_signature_parameter_cannot_have_an_initializer: diag(1020, ts.DiagnosticCategory.Error, "An_index_signature_parameter_cannot_have_an_initializer_1020", "An index signature parameter cannot have an initializer."),
An_index_signature_must_have_a_type_annotation: diag(1021, ts.DiagnosticCategory.Error, "An_index_signature_must_have_a_type_annotation_1021", "An index signature must have a type annotation."),
An_index_signature_parameter_must_have_a_type_annotation: diag(1022, ts.DiagnosticCategory.Error, "An_index_signature_parameter_must_have_a_type_annotation_1022", "An index signature parameter must have a type annotation."),
An_index_signature_parameter_type_must_be_string_or_number: diag(1023, ts.DiagnosticCategory.Error, "An_index_signature_parameter_type_must_be_string_or_number_1023", "An index signature parameter type must be 'string' or 'number'."),
readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature: diag(1024, ts.DiagnosticCategory.Error, "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024", "'readonly' modifier can only appear on a property declaration or index signature."),
Accessibility_modifier_already_seen: diag(1028, ts.DiagnosticCategory.Error, "Accessibility_modifier_already_seen_1028", "Accessibility modifier already seen."),
_0_modifier_must_precede_1_modifier: diag(1029, ts.DiagnosticCategory.Error, "_0_modifier_must_precede_1_modifier_1029", "'{0}' modifier must precede '{1}' modifier."),
_0_modifier_already_seen: diag(1030, ts.DiagnosticCategory.Error, "_0_modifier_already_seen_1030", "'{0}' modifier already seen."),
_0_modifier_cannot_appear_on_a_class_element: diag(1031, ts.DiagnosticCategory.Error, "_0_modifier_cannot_appear_on_a_class_element_1031", "'{0}' modifier cannot appear on a class element."),
super_must_be_followed_by_an_argument_list_or_member_access: diag(1034, ts.DiagnosticCategory.Error, "super_must_be_followed_by_an_argument_list_or_member_access_1034", "'super' must be followed by an argument list or member access."),
Only_ambient_modules_can_use_quoted_names: diag(1035, ts.DiagnosticCategory.Error, "Only_ambient_modules_can_use_quoted_names_1035", "Only ambient modules can use quoted names."),
Statements_are_not_allowed_in_ambient_contexts: diag(1036, ts.DiagnosticCategory.Error, "Statements_are_not_allowed_in_ambient_contexts_1036", "Statements are not allowed in ambient contexts."),
A_declare_modifier_cannot_be_used_in_an_already_ambient_context: diag(1038, ts.DiagnosticCategory.Error, "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038", "A 'declare' modifier cannot be used in an already ambient context."),
Initializers_are_not_allowed_in_ambient_contexts: diag(1039, ts.DiagnosticCategory.Error, "Initializers_are_not_allowed_in_ambient_contexts_1039", "Initializers are not allowed in ambient contexts."),
_0_modifier_cannot_be_used_in_an_ambient_context: diag(1040, ts.DiagnosticCategory.Error, "_0_modifier_cannot_be_used_in_an_ambient_context_1040", "'{0}' modifier cannot be used in an ambient context."),
_0_modifier_cannot_be_used_with_a_class_declaration: diag(1041, ts.DiagnosticCategory.Error, "_0_modifier_cannot_be_used_with_a_class_declaration_1041", "'{0}' modifier cannot be used with a class declaration."),
_0_modifier_cannot_be_used_here: diag(1042, ts.DiagnosticCategory.Error, "_0_modifier_cannot_be_used_here_1042", "'{0}' modifier cannot be used here."),
_0_modifier_cannot_appear_on_a_data_property: diag(1043, ts.DiagnosticCategory.Error, "_0_modifier_cannot_appear_on_a_data_property_1043", "'{0}' modifier cannot appear on a data property."),
_0_modifier_cannot_appear_on_a_module_or_namespace_element: diag(1044, ts.DiagnosticCategory.Error, "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044", "'{0}' modifier cannot appear on a module or namespace element."),
A_0_modifier_cannot_be_used_with_an_interface_declaration: diag(1045, ts.DiagnosticCategory.Error, "A_0_modifier_cannot_be_used_with_an_interface_declaration_1045", "A '{0}' modifier cannot be used with an interface declaration."),
A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file: diag(1046, ts.DiagnosticCategory.Error, "A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file_1046", "A 'declare' modifier is required for a top level declaration in a .d.ts file."),
A_rest_parameter_cannot_be_optional: diag(1047, ts.DiagnosticCategory.Error, "A_rest_parameter_cannot_be_optional_1047", "A rest parameter cannot be optional."),
A_rest_parameter_cannot_have_an_initializer: diag(1048, ts.DiagnosticCategory.Error, "A_rest_parameter_cannot_have_an_initializer_1048", "A rest parameter cannot have an initializer."),
A_set_accessor_must_have_exactly_one_parameter: diag(1049, ts.DiagnosticCategory.Error, "A_set_accessor_must_have_exactly_one_parameter_1049", "A 'set' accessor must have exactly one parameter."),
A_set_accessor_cannot_have_an_optional_parameter: diag(1051, ts.DiagnosticCategory.Error, "A_set_accessor_cannot_have_an_optional_parameter_1051", "A 'set' accessor cannot have an optional parameter."),
A_set_accessor_parameter_cannot_have_an_initializer: diag(1052, ts.DiagnosticCategory.Error, "A_set_accessor_parameter_cannot_have_an_initializer_1052", "A 'set' accessor parameter cannot have an initializer."),
A_set_accessor_cannot_have_rest_parameter: diag(1053, ts.DiagnosticCategory.Error, "A_set_accessor_cannot_have_rest_parameter_1053", "A 'set' accessor cannot have rest parameter."),
A_get_accessor_cannot_have_parameters: diag(1054, ts.DiagnosticCategory.Error, "A_get_accessor_cannot_have_parameters_1054", "A 'get' accessor cannot have parameters."),
Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Promise_compatible_constructor_value: diag(1055, ts.DiagnosticCategory.Error, "Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Prom_1055", "Type '{0}' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value."),
Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher: diag(1056, ts.DiagnosticCategory.Error, "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056", "Accessors are only available when targeting ECMAScript 5 and higher."),
An_async_function_or_method_must_have_a_valid_awaitable_return_type: diag(1057, ts.DiagnosticCategory.Error, "An_async_function_or_method_must_have_a_valid_awaitable_return_type_1057", "An async function or method must have a valid awaitable return type."),
The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member: diag(1058, ts.DiagnosticCategory.Error, "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058", "The return type of an async function must either be a valid promise or must not contain a callable 'then' member."),
A_promise_must_have_a_then_method: diag(1059, ts.DiagnosticCategory.Error, "A_promise_must_have_a_then_method_1059", "A promise must have a 'then' method."),
The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback: diag(1060, ts.DiagnosticCategory.Error, "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060", "The first parameter of the 'then' method of a promise must be a callback."),
Enum_member_must_have_initializer: diag(1061, ts.DiagnosticCategory.Error, "Enum_member_must_have_initializer_1061", "Enum member must have initializer."),
Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method: diag(1062, ts.DiagnosticCategory.Error, "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062", "Type is referenced directly or indirectly in the fulfillment callback of its own 'then' method."),
An_export_assignment_cannot_be_used_in_a_namespace: diag(1063, ts.DiagnosticCategory.Error, "An_export_assignment_cannot_be_used_in_a_namespace_1063", "An export assignment cannot be used in a namespace."),
The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type: diag(1064, ts.DiagnosticCategory.Error, "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1064", "The return type of an async function or method must be the global Promise<T> type."),
In_ambient_enum_declarations_member_initializer_must_be_constant_expression: diag(1066, ts.DiagnosticCategory.Error, "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066", "In ambient enum declarations member initializer must be constant expression."),
Unexpected_token_A_constructor_method_accessor_or_property_was_expected: diag(1068, ts.DiagnosticCategory.Error, "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068", "Unexpected token. A constructor, method, accessor, or property was expected."),
_0_modifier_cannot_appear_on_a_type_member: diag(1070, ts.DiagnosticCategory.Error, "_0_modifier_cannot_appear_on_a_type_member_1070", "'{0}' modifier cannot appear on a type member."),
_0_modifier_cannot_appear_on_an_index_signature: diag(1071, ts.DiagnosticCategory.Error, "_0_modifier_cannot_appear_on_an_index_signature_1071", "'{0}' modifier cannot appear on an index signature."),
A_0_modifier_cannot_be_used_with_an_import_declaration: diag(1079, ts.DiagnosticCategory.Error, "A_0_modifier_cannot_be_used_with_an_import_declaration_1079", "A '{0}' modifier cannot be used with an import declaration."),
Invalid_reference_directive_syntax: diag(1084, ts.DiagnosticCategory.Error, "Invalid_reference_directive_syntax_1084", "Invalid 'reference' directive syntax."),
Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_Use_the_syntax_0: diag(1085, ts.DiagnosticCategory.Error, "Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_Use_the_syntax_0_1085", "Octal literals are not available when targeting ECMAScript 5 and higher. Use the syntax '{0}'."),
An_accessor_cannot_be_declared_in_an_ambient_context: diag(1086, ts.DiagnosticCategory.Error, "An_accessor_cannot_be_declared_in_an_ambient_context_1086", "An accessor cannot be declared in an ambient context."),
_0_modifier_cannot_appear_on_a_constructor_declaration: diag(1089, ts.DiagnosticCategory.Error, "_0_modifier_cannot_appear_on_a_constructor_declaration_1089", "'{0}' modifier cannot appear on a constructor declaration."),
_0_modifier_cannot_appear_on_a_parameter: diag(1090, ts.DiagnosticCategory.Error, "_0_modifier_cannot_appear_on_a_parameter_1090", "'{0}' modifier cannot appear on a parameter."),
Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement: diag(1091, ts.DiagnosticCategory.Error, "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091", "Only a single variable declaration is allowed in a 'for...in' statement."),
Type_parameters_cannot_appear_on_a_constructor_declaration: diag(1092, ts.DiagnosticCategory.Error, "Type_parameters_cannot_appear_on_a_constructor_declaration_1092", "Type parameters cannot appear on a constructor declaration."),
Type_annotation_cannot_appear_on_a_constructor_declaration: diag(1093, ts.DiagnosticCategory.Error, "Type_annotation_cannot_appear_on_a_constructor_declaration_1093", "Type annotation cannot appear on a constructor declaration."),
An_accessor_cannot_have_type_parameters: diag(1094, ts.DiagnosticCategory.Error, "An_accessor_cannot_have_type_parameters_1094", "An accessor cannot have type parameters."),
A_set_accessor_cannot_have_a_return_type_annotation: diag(1095, ts.DiagnosticCategory.Error, "A_set_accessor_cannot_have_a_return_type_annotation_1095", "A 'set' accessor cannot have a return type annotation."),
An_index_signature_must_have_exactly_one_parameter: diag(1096, ts.DiagnosticCategory.Error, "An_index_signature_must_have_exactly_one_parameter_1096", "An index signature must have exactly one parameter."),
_0_list_cannot_be_empty: diag(1097, ts.DiagnosticCategory.Error, "_0_list_cannot_be_empty_1097", "'{0}' list cannot be empty."),
Type_parameter_list_cannot_be_empty: diag(1098, ts.DiagnosticCategory.Error, "Type_parameter_list_cannot_be_empty_1098", "Type parameter list cannot be empty."),
Type_argument_list_cannot_be_empty: diag(1099, ts.DiagnosticCategory.Error, "Type_argument_list_cannot_be_empty_1099", "Type argument list cannot be empty."),
Invalid_use_of_0_in_strict_mode: diag(1100, ts.DiagnosticCategory.Error, "Invalid_use_of_0_in_strict_mode_1100", "Invalid use of '{0}' in strict mode."),
with_statements_are_not_allowed_in_strict_mode: diag(1101, ts.DiagnosticCategory.Error, "with_statements_are_not_allowed_in_strict_mode_1101", "'with' statements are not allowed in strict mode."),
delete_cannot_be_called_on_an_identifier_in_strict_mode: diag(1102, ts.DiagnosticCategory.Error, "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102", "'delete' cannot be called on an identifier in strict mode."),
A_for_await_of_statement_is_only_allowed_within_an_async_function_or_async_generator: diag(1103, ts.DiagnosticCategory.Error, "A_for_await_of_statement_is_only_allowed_within_an_async_function_or_async_generator_1103", "A 'for-await-of' statement is only allowed within an async function or async generator."),
A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: diag(1104, ts.DiagnosticCategory.Error, "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104", "A 'continue' statement can only be used within an enclosing iteration statement."),
A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: diag(1105, ts.DiagnosticCategory.Error, "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105", "A 'break' statement can only be used within an enclosing iteration or switch statement."),
Jump_target_cannot_cross_function_boundary: diag(1107, ts.DiagnosticCategory.Error, "Jump_target_cannot_cross_function_boundary_1107", "Jump target cannot cross function boundary."),
A_return_statement_can_only_be_used_within_a_function_body: diag(1108, ts.DiagnosticCategory.Error, "A_return_statement_can_only_be_used_within_a_function_body_1108", "A 'return' statement can only be used within a function body."),
Expression_expected: diag(1109, ts.DiagnosticCategory.Error, "Expression_expected_1109", "Expression expected."),
Type_expected: diag(1110, ts.DiagnosticCategory.Error, "Type_expected_1110", "Type expected."),
A_default_clause_cannot_appear_more_than_once_in_a_switch_statement: diag(1113, ts.DiagnosticCategory.Error, "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113", "A 'default' clause cannot appear more than once in a 'switch' statement."),
Duplicate_label_0: diag(1114, ts.DiagnosticCategory.Error, "Duplicate_label_0_1114", "Duplicate label '{0}'."),
A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement: diag(1115, ts.DiagnosticCategory.Error, "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115", "A 'continue' statement can only jump to a label of an enclosing iteration statement."),
A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement: diag(1116, ts.DiagnosticCategory.Error, "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116", "A 'break' statement can only jump to a label of an enclosing statement."),
An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode: diag(1117, ts.DiagnosticCategory.Error, "An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode_1117", "An object literal cannot have multiple properties with the same name in strict mode."),
An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name: diag(1118, ts.DiagnosticCategory.Error, "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118", "An object literal cannot have multiple get/set accessors with the same name."),
An_object_literal_cannot_have_property_and_accessor_with_the_same_name: diag(1119, ts.DiagnosticCategory.Error, "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119", "An object literal cannot have property and accessor with the same name."),
An_export_assignment_cannot_have_modifiers: diag(1120, ts.DiagnosticCategory.Error, "An_export_assignment_cannot_have_modifiers_1120", "An export assignment cannot have modifiers."),
Octal_literals_are_not_allowed_in_strict_mode: diag(1121, ts.DiagnosticCategory.Error, "Octal_literals_are_not_allowed_in_strict_mode_1121", "Octal literals are not allowed in strict mode."),
A_tuple_type_element_list_cannot_be_empty: diag(1122, ts.DiagnosticCategory.Error, "A_tuple_type_element_list_cannot_be_empty_1122", "A tuple type element list cannot be empty."),
Variable_declaration_list_cannot_be_empty: diag(1123, ts.DiagnosticCategory.Error, "Variable_declaration_list_cannot_be_empty_1123", "Variable declaration list cannot be empty."),
Digit_expected: diag(1124, ts.DiagnosticCategory.Error, "Digit_expected_1124", "Digit expected."),
Hexadecimal_digit_expected: diag(1125, ts.DiagnosticCategory.Error, "Hexadecimal_digit_expected_1125", "Hexadecimal digit expected."),
Unexpected_end_of_text: diag(1126, ts.DiagnosticCategory.Error, "Unexpected_end_of_text_1126", "Unexpected end of text."),
Invalid_character: diag(1127, ts.DiagnosticCategory.Error, "Invalid_character_1127", "Invalid character."),
Declaration_or_statement_expected: diag(1128, ts.DiagnosticCategory.Error, "Declaration_or_statement_expected_1128", "Declaration or statement expected."),
Statement_expected: diag(1129, ts.DiagnosticCategory.Error, "Statement_expected_1129", "Statement expected."),
case_or_default_expected: diag(1130, ts.DiagnosticCategory.Error, "case_or_default_expected_1130", "'case' or 'default' expected."),
Property_or_signature_expected: diag(1131, ts.DiagnosticCategory.Error, "Property_or_signature_expected_1131", "Property or signature expected."),
Enum_member_expected: diag(1132, ts.DiagnosticCategory.Error, "Enum_member_expected_1132", "Enum member expected."),
Variable_declaration_expected: diag(1134, ts.DiagnosticCategory.Error, "Variable_declaration_expected_1134", "Variable declaration expected."),
Argument_expression_expected: diag(1135, ts.DiagnosticCategory.Error, "Argument_expression_expected_1135", "Argument expression expected."),
Property_assignment_expected: diag(1136, ts.DiagnosticCategory.Error, "Property_assignment_expected_1136", "Property assignment expected."),
Expression_or_comma_expected: diag(1137, ts.DiagnosticCategory.Error, "Expression_or_comma_expected_1137", "Expression or comma expected."),
Parameter_declaration_expected: diag(1138, ts.DiagnosticCategory.Error, "Parameter_declaration_expected_1138", "Parameter declaration expected."),
Type_parameter_declaration_expected: diag(1139, ts.DiagnosticCategory.Error, "Type_parameter_declaration_expected_1139", "Type parameter declaration expected."),
Type_argument_expected: diag(1140, ts.DiagnosticCategory.Error, "Type_argument_expected_1140", "Type argument expected."),
String_literal_expected: diag(1141, ts.DiagnosticCategory.Error, "String_literal_expected_1141", "String literal expected."),
Line_break_not_permitted_here: diag(1142, ts.DiagnosticCategory.Error, "Line_break_not_permitted_here_1142", "Line break not permitted here."),
or_expected: diag(1144, ts.DiagnosticCategory.Error, "or_expected_1144", "'{' or ';' expected."),
Declaration_expected: diag(1146, ts.DiagnosticCategory.Error, "Declaration_expected_1146", "Declaration expected."),
Import_declarations_in_a_namespace_cannot_reference_a_module: diag(1147, ts.DiagnosticCategory.Error, "Import_declarations_in_a_namespace_cannot_reference_a_module_1147", "Import declarations in a namespace cannot reference a module."),
Cannot_use_imports_exports_or_module_augmentations_when_module_is_none: diag(1148, ts.DiagnosticCategory.Error, "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148", "Cannot use imports, exports, or module augmentations when '--module' is 'none'."),
File_name_0_differs_from_already_included_file_name_1_only_in_casing: diag(1149, ts.DiagnosticCategory.Error, "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149", "File name '{0}' differs from already included file name '{1}' only in casing."),
new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead: diag(1150, ts.DiagnosticCategory.Error, "new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead_1150", "'new T[]' cannot be used to create an array. Use 'new Array<T>()' instead."),
const_declarations_must_be_initialized: diag(1155, ts.DiagnosticCategory.Error, "const_declarations_must_be_initialized_1155", "'const' declarations must be initialized."),
const_declarations_can_only_be_declared_inside_a_block: diag(1156, ts.DiagnosticCategory.Error, "const_declarations_can_only_be_declared_inside_a_block_1156", "'const' declarations can only be declared inside a block."),
let_declarations_can_only_be_declared_inside_a_block: diag(1157, ts.DiagnosticCategory.Error, "let_declarations_can_only_be_declared_inside_a_block_1157", "'let' declarations can only be declared inside a block."),
Unterminated_template_literal: diag(1160, ts.DiagnosticCategory.Error, "Unterminated_template_literal_1160", "Unterminated template literal."),
Unterminated_regular_expression_literal: diag(1161, ts.DiagnosticCategory.Error, "Unterminated_regular_expression_literal_1161", "Unterminated regular expression literal."),
An_object_member_cannot_be_declared_optional: diag(1162, ts.DiagnosticCategory.Error, "An_object_member_cannot_be_declared_optional_1162", "An object member cannot be declared optional."),
A_yield_expression_is_only_allowed_in_a_generator_body: diag(1163, ts.DiagnosticCategory.Error, "A_yield_expression_is_only_allowed_in_a_generator_body_1163", "A 'yield' expression is only allowed in a generator body."),
Computed_property_names_are_not_allowed_in_enums: diag(1164, ts.DiagnosticCategory.Error, "Computed_property_names_are_not_allowed_in_enums_1164", "Computed property names are not allowed in enums."),
A_computed_property_name_in_an_ambient_context_must_directly_refer_to_a_built_in_symbol: diag(1165, ts.DiagnosticCategory.Error, "A_computed_property_name_in_an_ambient_context_must_directly_refer_to_a_built_in_symbol_1165", "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: diag(1166, ts.DiagnosticCategory.Error, "A_computed_property_name_in_a_class_property_declaration_must_directly_refer_to_a_built_in_symbol_1166", "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: diag(1168, ts.DiagnosticCategory.Error, "A_computed_property_name_in_a_method_overload_must_directly_refer_to_a_built_in_symbol_1168", "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: diag(1169, ts.DiagnosticCategory.Error, "A_computed_property_name_in_an_interface_must_directly_refer_to_a_built_in_symbol_1169", "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: diag(1170, ts.DiagnosticCategory.Error, "A_computed_property_name_in_a_type_literal_must_directly_refer_to_a_built_in_symbol_1170", "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: diag(1171, ts.DiagnosticCategory.Error, "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171", "A comma expression is not allowed in a computed property name."),
extends_clause_already_seen: diag(1172, ts.DiagnosticCategory.Error, "extends_clause_already_seen_1172", "'extends' clause already seen."),
extends_clause_must_precede_implements_clause: diag(1173, ts.DiagnosticCategory.Error, "extends_clause_must_precede_implements_clause_1173", "'extends' clause must precede 'implements' clause."),
Classes_can_only_extend_a_single_class: diag(1174, ts.DiagnosticCategory.Error, "Classes_can_only_extend_a_single_class_1174", "Classes can only extend a single class."),
implements_clause_already_seen: diag(1175, ts.DiagnosticCategory.Error, "implements_clause_already_seen_1175", "'implements' clause already seen."),
Interface_declaration_cannot_have_implements_clause: diag(1176, ts.DiagnosticCategory.Error, "Interface_declaration_cannot_have_implements_clause_1176", "Interface declaration cannot have 'implements' clause."),
Binary_digit_expected: diag(1177, ts.DiagnosticCategory.Error, "Binary_digit_expected_1177", "Binary digit expected."),
Octal_digit_expected: diag(1178, ts.DiagnosticCategory.Error, "Octal_digit_expected_1178", "Octal digit expected."),
Unexpected_token_expected: diag(1179, ts.DiagnosticCategory.Error, "Unexpected_token_expected_1179", "Unexpected token. '{' expected."),
Property_destructuring_pattern_expected: diag(1180, ts.DiagnosticCategory.Error, "Property_destructuring_pattern_expected_1180", "Property destructuring pattern expected."),
Array_element_destructuring_pattern_expected: diag(1181, ts.DiagnosticCategory.Error, "Array_element_destructuring_pattern_expected_1181", "Array element destructuring pattern expected."),
A_destructuring_declaration_must_have_an_initializer: diag(1182, ts.DiagnosticCategory.Error, "A_destructuring_declaration_must_have_an_initializer_1182", "A destructuring declaration must have an initializer."),
An_implementation_cannot_be_declared_in_ambient_contexts: diag(1183, ts.DiagnosticCategory.Error, "An_implementation_cannot_be_declared_in_ambient_contexts_1183", "An implementation cannot be declared in ambient contexts."),
Modifiers_cannot_appear_here: diag(1184, ts.DiagnosticCategory.Error, "Modifiers_cannot_appear_here_1184", "Modifiers cannot appear here."),
Merge_conflict_marker_encountered: diag(1185, ts.DiagnosticCategory.Error, "Merge_conflict_marker_encountered_1185", "Merge conflict marker encountered."),
A_rest_element_cannot_have_an_initializer: diag(1186, ts.DiagnosticCategory.Error, "A_rest_element_cannot_have_an_initializer_1186", "A rest element cannot have an initializer."),
A_parameter_property_may_not_be_declared_using_a_binding_pattern: diag(1187, ts.DiagnosticCategory.Error, "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187", "A parameter property may not be declared using a binding pattern."),
Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement: diag(1188, ts.DiagnosticCategory.Error, "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188", "Only a single variable declaration is allowed in a 'for...of' statement."),
The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer: diag(1189, ts.DiagnosticCategory.Error, "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189", "The variable declaration of a 'for...in' statement cannot have an initializer."),
The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer: diag(1190, ts.DiagnosticCategory.Error, "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190", "The variable declaration of a 'for...of' statement cannot have an initializer."),
An_import_declaration_cannot_have_modifiers: diag(1191, ts.DiagnosticCategory.Error, "An_import_declaration_cannot_have_modifiers_1191", "An import declaration cannot have modifiers."),
Module_0_has_no_default_export: diag(1192, ts.DiagnosticCategory.Error, "Module_0_has_no_default_export_1192", "Module '{0}' has no default export."),
An_export_declaration_cannot_have_modifiers: diag(1193, ts.DiagnosticCategory.Error, "An_export_declaration_cannot_have_modifiers_1193", "An export declaration cannot have modifiers."),
Export_declarations_are_not_permitted_in_a_namespace: diag(1194, ts.DiagnosticCategory.Error, "Export_declarations_are_not_permitted_in_a_namespace_1194", "Export declarations are not permitted in a namespace."),
Catch_clause_variable_cannot_have_a_type_annotation: diag(1196, ts.DiagnosticCategory.Error, "Catch_clause_variable_cannot_have_a_type_annotation_1196", "Catch clause variable cannot have a type annotation."),
Catch_clause_variable_cannot_have_an_initializer: diag(1197, ts.DiagnosticCategory.Error, "Catch_clause_variable_cannot_have_an_initializer_1197", "Catch clause variable cannot have an initializer."),
An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive: diag(1198, ts.DiagnosticCategory.Error, "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198", "An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive."),
Unterminated_Unicode_escape_sequence: diag(1199, ts.DiagnosticCategory.Error, "Unterminated_Unicode_escape_sequence_1199", "Unterminated Unicode escape sequence."),
Line_terminator_not_permitted_before_arrow: diag(1200, ts.DiagnosticCategory.Error, "Line_terminator_not_permitted_before_arrow_1200", "Line terminator not permitted before arrow."),
Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_ns_from_mod_import_a_from_mod_import_d_from_mod_or_another_module_format_instead: diag(1202, ts.DiagnosticCategory.Error, "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202", "Import assignment cannot be used when targeting ECMAScript modules. Consider using 'import * as ns from \"mod\"', 'import {a} from \"mod\"', 'import d from \"mod\"', or another module format instead."),
Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or_another_module_format_instead: diag(1203, ts.DiagnosticCategory.Error, "Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203", "Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead."),
Cannot_re_export_a_type_when_the_isolatedModules_flag_is_provided: diag(1205, ts.DiagnosticCategory.Error, "Cannot_re_export_a_type_when_the_isolatedModules_flag_is_provided_1205", "Cannot re-export a type when the '--isolatedModules' flag is provided."),
Decorators_are_not_valid_here: diag(1206, ts.DiagnosticCategory.Error, "Decorators_are_not_valid_here_1206", "Decorators are not valid here."),
Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name: diag(1207, ts.DiagnosticCategory.Error, "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207", "Decorators cannot be applied to multiple get/set accessors of the same name."),
Cannot_compile_namespaces_when_the_isolatedModules_flag_is_provided: diag(1208, ts.DiagnosticCategory.Error, "Cannot_compile_namespaces_when_the_isolatedModules_flag_is_provided_1208", "Cannot compile namespaces when the '--isolatedModules' flag is provided."),
Ambient_const_enums_are_not_allowed_when_the_isolatedModules_flag_is_provided: diag(1209, ts.DiagnosticCategory.Error, "Ambient_const_enums_are_not_allowed_when_the_isolatedModules_flag_is_provided_1209", "Ambient const enums are not allowed when the '--isolatedModules' flag is provided."),
Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode: diag(1210, ts.DiagnosticCategory.Error, "Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode_1210", "Invalid use of '{0}'. Class definitions are automatically in strict mode."),
A_class_declaration_without_the_default_modifier_must_have_a_name: diag(1211, ts.DiagnosticCategory.Error, "A_class_declaration_without_the_default_modifier_must_have_a_name_1211", "A class declaration without the 'default' modifier must have a name."),
Identifier_expected_0_is_a_reserved_word_in_strict_mode: diag(1212, ts.DiagnosticCategory.Error, "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212", "Identifier expected. '{0}' is a reserved word in strict mode."),
Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode: diag(1213, ts.DiagnosticCategory.Error, "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213", "Identifier expected. '{0}' is a reserved word in strict mode. Class definitions are automatically in strict mode."),
Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode: diag(1214, ts.DiagnosticCategory.Error, "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214", "Identifier expected. '{0}' is a reserved word in strict mode. Modules are automatically in strict mode."),
Invalid_use_of_0_Modules_are_automatically_in_strict_mode: diag(1215, ts.DiagnosticCategory.Error, "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215", "Invalid use of '{0}'. Modules are automatically in strict mode."),
Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules: diag(1216, ts.DiagnosticCategory.Error, "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216", "Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules."),
Export_assignment_is_not_supported_when_module_flag_is_system: diag(1218, ts.DiagnosticCategory.Error, "Export_assignment_is_not_supported_when_module_flag_is_system_1218", "Export assignment is not supported when '--module' flag is 'system'."),
Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_the_experimentalDecorators_option_to_remove_this_warning: diag(1219, ts.DiagnosticCategory.Error, "Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_t_1219", "Experimental support for decorators is a feature that is subject to change in a future release. Set the 'experimentalDecorators' option to remove this warning."),
Generators_are_only_available_when_targeting_ECMAScript_2015_or_higher: diag(1220, ts.DiagnosticCategory.Error, "Generators_are_only_available_when_targeting_ECMAScript_2015_or_higher_1220", "Generators are only available when targeting ECMAScript 2015 or higher."),
Generators_are_not_allowed_in_an_ambient_context: diag(1221, ts.DiagnosticCategory.Error, "Generators_are_not_allowed_in_an_ambient_context_1221", "Generators are not allowed in an ambient context."),
An_overload_signature_cannot_be_declared_as_a_generator: diag(1222, ts.DiagnosticCategory.Error, "An_overload_signature_cannot_be_declared_as_a_generator_1222", "An overload signature cannot be declared as a generator."),
_0_tag_already_specified: diag(1223, ts.DiagnosticCategory.Error, "_0_tag_already_specified_1223", "'{0}' tag already specified."),
Signature_0_must_be_a_type_predicate: diag(1224, ts.DiagnosticCategory.Error, "Signature_0_must_be_a_type_predicate_1224", "Signature '{0}' must be a type predicate."),
Cannot_find_parameter_0: diag(1225, ts.DiagnosticCategory.Error, "Cannot_find_parameter_0_1225", "Cannot find parameter '{0}'."),
Type_predicate_0_is_not_assignable_to_1: diag(1226, ts.DiagnosticCategory.Error, "Type_predicate_0_is_not_assignable_to_1_1226", "Type predicate '{0}' is not assignable to '{1}'."),
Parameter_0_is_not_in_the_same_position_as_parameter_1: diag(1227, ts.DiagnosticCategory.Error, "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227", "Parameter '{0}' is not in the same position as parameter '{1}'."),
A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods: diag(1228, ts.DiagnosticCategory.Error, "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228", "A type predicate is only allowed in return type position for functions and methods."),
A_type_predicate_cannot_reference_a_rest_parameter: diag(1229, ts.DiagnosticCategory.Error, "A_type_predicate_cannot_reference_a_rest_parameter_1229", "A type predicate cannot reference a rest parameter."),
A_type_predicate_cannot_reference_element_0_in_a_binding_pattern: diag(1230, ts.DiagnosticCategory.Error, "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230", "A type predicate cannot reference element '{0}' in a binding pattern."),
An_export_assignment_can_only_be_used_in_a_module: diag(1231, ts.DiagnosticCategory.Error, "An_export_assignment_can_only_be_used_in_a_module_1231", "An export assignment can only be used in a module."),
An_import_declaration_can_only_be_used_in_a_namespace_or_module: diag(1232, ts.DiagnosticCategory.Error, "An_import_declaration_can_only_be_used_in_a_namespace_or_module_1232", "An import declaration can only be used in a namespace or module."),
An_export_declaration_can_only_be_used_in_a_module: diag(1233, ts.DiagnosticCategory.Error, "An_export_declaration_can_only_be_used_in_a_module_1233", "An export declaration can only be used in a module."),
An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file: diag(1234, ts.DiagnosticCategory.Error, "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234", "An ambient module declaration is only allowed at the top level in a file."),
A_namespace_declaration_is_only_allowed_in_a_namespace_or_module: diag(1235, ts.DiagnosticCategory.Error, "A_namespace_declaration_is_only_allowed_in_a_namespace_or_module_1235", "A namespace declaration is only allowed in a namespace or module."),
The_return_type_of_a_property_decorator_function_must_be_either_void_or_any: diag(1236, ts.DiagnosticCategory.Error, "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236", "The return type of a property decorator function must be either 'void' or 'any'."),
The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any: diag(1237, ts.DiagnosticCategory.Error, "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237", "The return type of a parameter decorator function must be either 'void' or 'any'."),
Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression: diag(1238, ts.DiagnosticCategory.Error, "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238", "Unable to resolve signature of class decorator when called as an expression."),
Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression: diag(1239, ts.DiagnosticCategory.Error, "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239", "Unable to resolve signature of parameter decorator when called as an expression."),
Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression: diag(1240, ts.DiagnosticCategory.Error, "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240", "Unable to resolve signature of property decorator when called as an expression."),
Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression: diag(1241, ts.DiagnosticCategory.Error, "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241", "Unable to resolve signature of method decorator when called as an expression."),
abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration: diag(1242, ts.DiagnosticCategory.Error, "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242", "'abstract' modifier can only appear on a class, method, or property declaration."),
_0_modifier_cannot_be_used_with_1_modifier: diag(1243, ts.DiagnosticCategory.Error, "_0_modifier_cannot_be_used_with_1_modifier_1243", "'{0}' modifier cannot be used with '{1}' modifier."),
Abstract_methods_can_only_appear_within_an_abstract_class: diag(1244, ts.DiagnosticCategory.Error, "Abstract_methods_can_only_appear_within_an_abstract_class_1244", "Abstract methods can only appear within an abstract class."),
Method_0_cannot_have_an_implementation_because_it_is_marked_abstract: diag(1245, ts.DiagnosticCategory.Error, "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245", "Method '{0}' cannot have an implementation because it is marked abstract."),
An_interface_property_cannot_have_an_initializer: diag(1246, ts.DiagnosticCategory.Error, "An_interface_property_cannot_have_an_initializer_1246", "An interface property cannot have an initializer."),
A_type_literal_property_cannot_have_an_initializer: diag(1247, ts.DiagnosticCategory.Error, "A_type_literal_property_cannot_have_an_initializer_1247", "A type literal property cannot have an initializer."),
A_class_member_cannot_have_the_0_keyword: diag(1248, ts.DiagnosticCategory.Error, "A_class_member_cannot_have_the_0_keyword_1248", "A class member cannot have the '{0}' keyword."),
A_decorator_can_only_decorate_a_method_implementation_not_an_overload: diag(1249, ts.DiagnosticCategory.Error, "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249", "A decorator can only decorate a method implementation, not an overload."),
Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5: diag(1250, ts.DiagnosticCategory.Error, "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_1250", "Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'."),
Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_definitions_are_automatically_in_strict_mode: diag(1251, ts.DiagnosticCategory.Error, "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_d_1251", "Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'. Class definitions are automatically in strict mode."),
Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_are_automatically_in_strict_mode: diag(1252, ts.DiagnosticCategory.Error, "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_1252", "Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'. Modules are automatically in strict mode."),
_0_tag_cannot_be_used_independently_as_a_top_level_JSDoc_tag: diag(1253, ts.DiagnosticCategory.Error, "_0_tag_cannot_be_used_independently_as_a_top_level_JSDoc_tag_1253", "'{0}' tag cannot be used independently as a top level JSDoc tag."),
A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal: diag(1254, ts.DiagnosticCategory.Error, "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_1254", "A 'const' initializer in an ambient context must be a string or numeric literal."),
with_statements_are_not_allowed_in_an_async_function_block: diag(1300, ts.DiagnosticCategory.Error, "with_statements_are_not_allowed_in_an_async_function_block_1300", "'with' statements are not allowed in an async function block."),
await_expression_is_only_allowed_within_an_async_function: diag(1308, ts.DiagnosticCategory.Error, "await_expression_is_only_allowed_within_an_async_function_1308", "'await' expression is only allowed within an async function."),
can_only_be_used_in_an_object_literal_property_inside_a_destructuring_assignment: diag(1312, ts.DiagnosticCategory.Error, "can_only_be_used_in_an_object_literal_property_inside_a_destructuring_assignment_1312", "'=' can only be used in an object literal property inside a destructuring assignment."),
The_body_of_an_if_statement_cannot_be_the_empty_statement: diag(1313, ts.DiagnosticCategory.Error, "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313", "The body of an 'if' statement cannot be the empty statement."),
Global_module_exports_may_only_appear_in_module_files: diag(1314, ts.DiagnosticCategory.Error, "Global_module_exports_may_only_appear_in_module_files_1314", "Global module exports may only appear in module files."),
Global_module_exports_may_only_appear_in_declaration_files: diag(1315, ts.DiagnosticCategory.Error, "Global_module_exports_may_only_appear_in_declaration_files_1315", "Global module exports may only appear in declaration files."),
Global_module_exports_may_only_appear_at_top_level: diag(1316, ts.DiagnosticCategory.Error, "Global_module_exports_may_only_appear_at_top_level_1316", "Global module exports may only appear at top level."),
A_parameter_property_cannot_be_declared_using_a_rest_parameter: diag(1317, ts.DiagnosticCategory.Error, "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317", "A parameter property cannot be declared using a rest parameter."),
An_abstract_accessor_cannot_have_an_implementation: diag(1318, ts.DiagnosticCategory.Error, "An_abstract_accessor_cannot_have_an_implementation_1318", "An abstract accessor cannot have an implementation."),
A_default_export_can_only_be_used_in_an_ECMAScript_style_module: diag(1319, ts.DiagnosticCategory.Error, "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319", "A default export can only be used in an ECMAScript-style module."),
Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member: diag(1320, ts.DiagnosticCategory.Error, "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320", "Type of 'await' operand must either be a valid promise or must not contain a callable 'then' member."),
Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member: diag(1321, ts.DiagnosticCategory.Error, "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321", "Type of 'yield' operand in an async generator must either be a valid promise or must not contain a callable 'then' member."),
Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member: diag(1322, ts.DiagnosticCategory.Error, "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322", "Type of iterated elements of a 'yield*' operand must either be a valid promise or must not contain a callable 'then' member."),
Dynamic_import_cannot_be_used_when_targeting_ECMAScript_2015_modules: diag(1323, ts.DiagnosticCategory.Error, "Dynamic_import_cannot_be_used_when_targeting_ECMAScript_2015_modules_1323", "Dynamic import cannot be used when targeting ECMAScript 2015 modules."),
Dynamic_import_must_have_one_specifier_as_an_argument: diag(1324, ts.DiagnosticCategory.Error, "Dynamic_import_must_have_one_specifier_as_an_argument_1324", "Dynamic import must have one specifier as an argument."),
Specifier_of_dynamic_import_cannot_be_spread_element: diag(1325, ts.DiagnosticCategory.Error, "Specifier_of_dynamic_import_cannot_be_spread_element_1325", "Specifier of dynamic import cannot be spread element."),
Dynamic_import_cannot_have_type_arguments: diag(1326, ts.DiagnosticCategory.Error, "Dynamic_import_cannot_have_type_arguments_1326", "Dynamic import cannot have type arguments"),
String_literal_with_double_quotes_expected: diag(1327, ts.DiagnosticCategory.Error, "String_literal_with_double_quotes_expected_1327", "String literal with double quotes expected."),
Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_literal: diag(1328, ts.DiagnosticCategory.Error, "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328", "Property value can only be string literal, numeric literal, 'true', 'false', 'null', object literal or array literal."),
_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write_0: diag(1329, ts.DiagnosticCategory.Error, "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329", "'{0}' accepts too few arguments to be used as a decorator here. Did you mean to call it first and write '@{0}()'?"),
Duplicate_identifier_0: diag(2300, ts.DiagnosticCategory.Error, "Duplicate_identifier_0_2300", "Duplicate identifier '{0}'."),
Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: diag(2301, ts.DiagnosticCategory.Error, "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301", "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor."),
Static_members_cannot_reference_class_type_parameters: diag(2302, ts.DiagnosticCategory.Error, "Static_members_cannot_reference_class_type_parameters_2302", "Static members cannot reference class type parameters."),
Circular_definition_of_import_alias_0: diag(2303, ts.DiagnosticCategory.Error, "Circular_definition_of_import_alias_0_2303", "Circular definition of import alias '{0}'."),
Cannot_find_name_0: diag(2304, ts.DiagnosticCategory.Error, "Cannot_find_name_0_2304", "Cannot find name '{0}'."),
Module_0_has_no_exported_member_1: diag(2305, ts.DiagnosticCategory.Error, "Module_0_has_no_exported_member_1_2305", "Module '{0}' has no exported member '{1}'."),
File_0_is_not_a_module: diag(2306, ts.DiagnosticCategory.Error, "File_0_is_not_a_module_2306", "File '{0}' is not a module."),
Cannot_find_module_0: diag(2307, ts.DiagnosticCategory.Error, "Cannot_find_module_0_2307", "Cannot find module '{0}'."),
Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambiguity: diag(2308, ts.DiagnosticCategory.Error, "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308", "Module {0} has already exported a member named '{1}'. Consider explicitly re-exporting to resolve the ambiguity."),
An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements: diag(2309, ts.DiagnosticCategory.Error, "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309", "An export assignment cannot be used in a module with other exported elements."),
Type_0_recursively_references_itself_as_a_base_type: diag(2310, ts.DiagnosticCategory.Error, "Type_0_recursively_references_itself_as_a_base_type_2310", "Type '{0}' recursively references itself as a base type."),
A_class_may_only_extend_another_class: diag(2311, ts.DiagnosticCategory.Error, "A_class_may_only_extend_another_class_2311", "A class may only extend another class."),
An_interface_may_only_extend_a_class_or_another_interface: diag(2312, ts.DiagnosticCategory.Error, "An_interface_may_only_extend_a_class_or_another_interface_2312", "An interface may only extend a class or another interface."),
Type_parameter_0_has_a_circular_constraint: diag(2313, ts.DiagnosticCategory.Error, "Type_parameter_0_has_a_circular_constraint_2313", "Type parameter '{0}' has a circular constraint."),
Generic_type_0_requires_1_type_argument_s: diag(2314, ts.DiagnosticCategory.Error, "Generic_type_0_requires_1_type_argument_s_2314", "Generic type '{0}' requires {1} type argument(s)."),
Type_0_is_not_generic: diag(2315, ts.DiagnosticCategory.Error, "Type_0_is_not_generic_2315", "Type '{0}' is not generic."),
Global_type_0_must_be_a_class_or_interface_type: diag(2316, ts.DiagnosticCategory.Error, "Global_type_0_must_be_a_class_or_interface_type_2316", "Global type '{0}' must be a class or interface type."),
Global_type_0_must_have_1_type_parameter_s: diag(2317, ts.DiagnosticCategory.Error, "Global_type_0_must_have_1_type_parameter_s_2317", "Global type '{0}' must have {1} type parameter(s)."),
Cannot_find_global_type_0: diag(2318, ts.DiagnosticCategory.Error, "Cannot_find_global_type_0_2318", "Cannot find global type '{0}'."),
Named_property_0_of_types_1_and_2_are_not_identical: diag(2319, ts.DiagnosticCategory.Error, "Named_property_0_of_types_1_and_2_are_not_identical_2319", "Named property '{0}' of types '{1}' and '{2}' are not identical."),
Interface_0_cannot_simultaneously_extend_types_1_and_2: diag(2320, ts.DiagnosticCategory.Error, "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320", "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}'."),
Excessive_stack_depth_comparing_types_0_and_1: diag(2321, ts.DiagnosticCategory.Error, "Excessive_stack_depth_comparing_types_0_and_1_2321", "Excessive stack depth comparing types '{0}' and '{1}'."),
Type_0_is_not_assignable_to_type_1: diag(2322, ts.DiagnosticCategory.Error, "Type_0_is_not_assignable_to_type_1_2322", "Type '{0}' is not assignable to type '{1}'."),
Cannot_redeclare_exported_variable_0: diag(2323, ts.DiagnosticCategory.Error, "Cannot_redeclare_exported_variable_0_2323", "Cannot redeclare exported variable '{0}'."),
Property_0_is_missing_in_type_1: diag(2324, ts.DiagnosticCategory.Error, "Property_0_is_missing_in_type_1_2324", "Property '{0}' is missing in type '{1}'."),
Property_0_is_private_in_type_1_but_not_in_type_2: diag(2325, ts.DiagnosticCategory.Error, "Property_0_is_private_in_type_1_but_not_in_type_2_2325", "Property '{0}' is private in type '{1}' but not in type '{2}'."),
Types_of_property_0_are_incompatible: diag(2326, ts.DiagnosticCategory.Error, "Types_of_property_0_are_incompatible_2326", "Types of property '{0}' are incompatible."),
Property_0_is_optional_in_type_1_but_required_in_type_2: diag(2327, ts.DiagnosticCategory.Error, "Property_0_is_optional_in_type_1_but_required_in_type_2_2327", "Property '{0}' is optional in type '{1}' but required in type '{2}'."),
Types_of_parameters_0_and_1_are_incompatible: diag(2328, ts.DiagnosticCategory.Error, "Types_of_parameters_0_and_1_are_incompatible_2328", "Types of parameters '{0}' and '{1}' are incompatible."),
Index_signature_is_missing_in_type_0: diag(2329, ts.DiagnosticCategory.Error, "Index_signature_is_missing_in_type_0_2329", "Index signature is missing in type '{0}'."),
Index_signatures_are_incompatible: diag(2330, ts.DiagnosticCategory.Error, "Index_signatures_are_incompatible_2330", "Index signatures are incompatible."),
this_cannot_be_referenced_in_a_module_or_namespace_body: diag(2331, ts.DiagnosticCategory.Error, "this_cannot_be_referenced_in_a_module_or_namespace_body_2331", "'this' cannot be referenced in a module or namespace body."),
this_cannot_be_referenced_in_current_location: diag(2332, ts.DiagnosticCategory.Error, "this_cannot_be_referenced_in_current_location_2332", "'this' cannot be referenced in current location."),
this_cannot_be_referenced_in_constructor_arguments: diag(2333, ts.DiagnosticCategory.Error, "this_cannot_be_referenced_in_constructor_arguments_2333", "'this' cannot be referenced in constructor arguments."),
this_cannot_be_referenced_in_a_static_property_initializer: diag(2334, ts.DiagnosticCategory.Error, "this_cannot_be_referenced_in_a_static_property_initializer_2334", "'this' cannot be referenced in a static property initializer."),
super_can_only_be_referenced_in_a_derived_class: diag(2335, ts.DiagnosticCategory.Error, "super_can_only_be_referenced_in_a_derived_class_2335", "'super' can only be referenced in a derived class."),
super_cannot_be_referenced_in_constructor_arguments: diag(2336, ts.DiagnosticCategory.Error, "super_cannot_be_referenced_in_constructor_arguments_2336", "'super' cannot be referenced in constructor arguments."),
Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors: diag(2337, ts.DiagnosticCategory.Error, "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337", "Super calls are not permitted outside constructors or in nested functions inside constructors."),
super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class: diag(2338, ts.DiagnosticCategory.Error, "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338", "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class."),
Property_0_does_not_exist_on_type_1: diag(2339, ts.DiagnosticCategory.Error, "Property_0_does_not_exist_on_type_1_2339", "Property '{0}' does not exist on type '{1}'."),
Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword: diag(2340, ts.DiagnosticCategory.Error, "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340", "Only public and protected methods of the base class are accessible via the 'super' keyword."),
Property_0_is_private_and_only_accessible_within_class_1: diag(2341, ts.DiagnosticCategory.Error, "Property_0_is_private_and_only_accessible_within_class_1_2341", "Property '{0}' is private and only accessible within class '{1}'."),
An_index_expression_argument_must_be_of_type_string_number_symbol_or_any: diag(2342, ts.DiagnosticCategory.Error, "An_index_expression_argument_must_be_of_type_string_number_symbol_or_any_2342", "An index expression argument must be of type 'string', 'number', 'symbol', or 'any'."),
This_syntax_requires_an_imported_helper_named_1_but_module_0_has_no_exported_member_1: diag(2343, ts.DiagnosticCategory.Error, "This_syntax_requires_an_imported_helper_named_1_but_module_0_has_no_exported_member_1_2343", "This syntax requires an imported helper named '{1}', but module '{0}' has no exported member '{1}'."),
Type_0_does_not_satisfy_the_constraint_1: diag(2344, ts.DiagnosticCategory.Error, "Type_0_does_not_satisfy_the_constraint_1_2344", "Type '{0}' does not satisfy the constraint '{1}'."),
Argument_of_type_0_is_not_assignable_to_parameter_of_type_1: diag(2345, ts.DiagnosticCategory.Error, "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345", "Argument of type '{0}' is not assignable to parameter of type '{1}'."),
Call_target_does_not_contain_any_signatures: diag(2346, ts.DiagnosticCategory.Error, "Call_target_does_not_contain_any_signatures_2346", "Call target does not contain any signatures."),
Untyped_function_calls_may_not_accept_type_arguments: diag(2347, ts.DiagnosticCategory.Error, "Untyped_function_calls_may_not_accept_type_arguments_2347", "Untyped function calls may not accept type arguments."),
Value_of_type_0_is_not_callable_Did_you_mean_to_include_new: diag(2348, ts.DiagnosticCategory.Error, "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348", "Value of type '{0}' is not callable. Did you mean to include 'new'?"),
Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures: diag(2349, ts.DiagnosticCategory.Error, "Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatur_2349", "Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures."),
Only_a_void_function_can_be_called_with_the_new_keyword: diag(2350, ts.DiagnosticCategory.Error, "Only_a_void_function_can_be_called_with_the_new_keyword_2350", "Only a void function can be called with the 'new' keyword."),
Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature: diag(2351, ts.DiagnosticCategory.Error, "Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature_2351", "Cannot use 'new' with an expression whose type lacks a call or construct signature."),
Type_0_cannot_be_converted_to_type_1: diag(2352, ts.DiagnosticCategory.Error, "Type_0_cannot_be_converted_to_type_1_2352", "Type '{0}' cannot be converted to type '{1}'."),
Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1: diag(2353, ts.DiagnosticCategory.Error, "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353", "Object literal may only specify known properties, and '{0}' does not exist in type '{1}'."),
This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found: diag(2354, ts.DiagnosticCategory.Error, "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354", "This syntax requires an imported helper but module '{0}' cannot be found."),
A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value: diag(2355, ts.DiagnosticCategory.Error, "A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_2355", "A function whose declared type is neither 'void' nor 'any' must return a value."),
An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type: diag(2356, ts.DiagnosticCategory.Error, "An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type_2356", "An arithmetic operand must be of type 'any', 'number' or an enum type."),
The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access: diag(2357, ts.DiagnosticCategory.Error, "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357", "The operand of an increment or decrement operator must be a variable or a property access."),
The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: diag(2358, ts.DiagnosticCategory.Error, "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358", "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter."),
The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type: diag(2359, ts.DiagnosticCategory.Error, "The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359", "The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type."),
The_left_hand_side_of_an_in_expression_must_be_of_type_any_string_number_or_symbol: diag(2360, ts.DiagnosticCategory.Error, "The_left_hand_side_of_an_in_expression_must_be_of_type_any_string_number_or_symbol_2360", "The left-hand side of an 'in' expression must be of type 'any', 'string', 'number', or 'symbol'."),
The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: diag(2361, ts.DiagnosticCategory.Error, "The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter_2361", "The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter."),
The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: diag(2362, ts.DiagnosticCategory.Error, "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type_2362", "The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type."),
The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type: diag(2363, ts.DiagnosticCategory.Error, "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type_2363", "The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type."),
The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access: diag(2364, ts.DiagnosticCategory.Error, "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364", "The left-hand side of an assignment expression must be a variable or a property access."),
Operator_0_cannot_be_applied_to_types_1_and_2: diag(2365, ts.DiagnosticCategory.Error, "Operator_0_cannot_be_applied_to_types_1_and_2_2365", "Operator '{0}' cannot be applied to types '{1}' and '{2}'."),
Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined: diag(2366, ts.DiagnosticCategory.Error, "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366", "Function lacks ending return statement and return type does not include 'undefined'."),
Type_parameter_name_cannot_be_0: diag(2368, ts.DiagnosticCategory.Error, "Type_parameter_name_cannot_be_0_2368", "Type parameter name cannot be '{0}'."),
A_parameter_property_is_only_allowed_in_a_constructor_implementation: diag(2369, ts.DiagnosticCategory.Error, "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369", "A parameter property is only allowed in a constructor implementation."),
A_rest_parameter_must_be_of_an_array_type: diag(2370, ts.DiagnosticCategory.Error, "A_rest_parameter_must_be_of_an_array_type_2370", "A rest parameter must be of an array type."),
A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation: diag(2371, ts.DiagnosticCategory.Error, "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371", "A parameter initializer is only allowed in a function or constructor implementation."),
Parameter_0_cannot_be_referenced_in_its_initializer: diag(2372, ts.DiagnosticCategory.Error, "Parameter_0_cannot_be_referenced_in_its_initializer_2372", "Parameter '{0}' cannot be referenced in its initializer."),
Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it: diag(2373, ts.DiagnosticCategory.Error, "Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it_2373", "Initializer of parameter '{0}' cannot reference identifier '{1}' declared after it."),
Duplicate_string_index_signature: diag(2374, ts.DiagnosticCategory.Error, "Duplicate_string_index_signature_2374", "Duplicate string index signature."),
Duplicate_number_index_signature: diag(2375, ts.DiagnosticCategory.Error, "Duplicate_number_index_signature_2375", "Duplicate number index signature."),
A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties: diag(2376, ts.DiagnosticCategory.Error, "A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_proper_2376", "A 'super' call must be the first statement in the constructor when a class contains initialized properties or has parameter properties."),
Constructors_for_derived_classes_must_contain_a_super_call: diag(2377, ts.DiagnosticCategory.Error, "Constructors_for_derived_classes_must_contain_a_super_call_2377", "Constructors for derived classes must contain a 'super' call."),
A_get_accessor_must_return_a_value: diag(2378, ts.DiagnosticCategory.Error, "A_get_accessor_must_return_a_value_2378", "A 'get' accessor must return a value."),
Getter_and_setter_accessors_do_not_agree_in_visibility: diag(2379, ts.DiagnosticCategory.Error, "Getter_and_setter_accessors_do_not_agree_in_visibility_2379", "Getter and setter accessors do not agree in visibility."),
get_and_set_accessor_must_have_the_same_type: diag(2380, ts.DiagnosticCategory.Error, "get_and_set_accessor_must_have_the_same_type_2380", "'get' and 'set' accessor must have the same type."),
A_signature_with_an_implementation_cannot_use_a_string_literal_type: diag(2381, ts.DiagnosticCategory.Error, "A_signature_with_an_implementation_cannot_use_a_string_literal_type_2381", "A signature with an implementation cannot use a string literal type."),
Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature: diag(2382, ts.DiagnosticCategory.Error, "Specialized_overload_signature_is_not_assignable_to_any_non_specialized_signature_2382", "Specialized overload signature is not assignable to any non-specialized signature."),
Overload_signatures_must_all_be_exported_or_non_exported: diag(2383, ts.DiagnosticCategory.Error, "Overload_signatures_must_all_be_exported_or_non_exported_2383", "Overload signatures must all be exported or non-exported."),
Overload_signatures_must_all_be_ambient_or_non_ambient: diag(2384, ts.DiagnosticCategory.Error, "Overload_signatures_must_all_be_ambient_or_non_ambient_2384", "Overload signatures must all be ambient or non-ambient."),
Overload_signatures_must_all_be_public_private_or_protected: diag(2385, ts.DiagnosticCategory.Error, "Overload_signatures_must_all_be_public_private_or_protected_2385", "Overload signatures must all be public, private or protected."),
Overload_signatures_must_all_be_optional_or_required: diag(2386, ts.DiagnosticCategory.Error, "Overload_signatures_must_all_be_optional_or_required_2386", "Overload signatures must all be optional or required."),
Function_overload_must_be_static: diag(2387, ts.DiagnosticCategory.Error, "Function_overload_must_be_static_2387", "Function overload must be static."),
Function_overload_must_not_be_static: diag(2388, ts.DiagnosticCategory.Error, "Function_overload_must_not_be_static_2388", "Function overload must not be static."),
Function_implementation_name_must_be_0: diag(2389, ts.DiagnosticCategory.Error, "Function_implementation_name_must_be_0_2389", "Function implementation name must be '{0}'."),
Constructor_implementation_is_missing: diag(2390, ts.DiagnosticCategory.Error, "Constructor_implementation_is_missing_2390", "Constructor implementation is missing."),
Function_implementation_is_missing_or_not_immediately_following_the_declaration: diag(2391, ts.DiagnosticCategory.Error, "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391", "Function implementation is missing or not immediately following the declaration."),
Multiple_constructor_implementations_are_not_allowed: diag(2392, ts.DiagnosticCategory.Error, "Multiple_constructor_implementations_are_not_allowed_2392", "Multiple constructor implementations are not allowed."),
Duplicate_function_implementation: diag(2393, ts.DiagnosticCategory.Error, "Duplicate_function_implementation_2393", "Duplicate function implementation."),
Overload_signature_is_not_compatible_with_function_implementation: diag(2394, ts.DiagnosticCategory.Error, "Overload_signature_is_not_compatible_with_function_implementation_2394", "Overload signature is not compatible with function implementation."),
Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local: diag(2395, ts.DiagnosticCategory.Error, "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395", "Individual declarations in merged declaration '{0}' must be all exported or all local."),
Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters: diag(2396, ts.DiagnosticCategory.Error, "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396", "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters."),
Declaration_name_conflicts_with_built_in_global_identifier_0: diag(2397, ts.DiagnosticCategory.Error, "Declaration_name_conflicts_with_built_in_global_identifier_0_2397", "Declaration name conflicts with built-in global identifier '{0}'."),
Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference: diag(2399, ts.DiagnosticCategory.Error, "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399", "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference."),
Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference: diag(2400, ts.DiagnosticCategory.Error, "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400", "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference."),
Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference: diag(2401, ts.DiagnosticCategory.Error, "Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference_2401", "Duplicate identifier '_super'. Compiler uses '_super' to capture base class reference."),
Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference: diag(2402, ts.DiagnosticCategory.Error, "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402", "Expression resolves to '_super' that compiler uses to capture base class reference."),
Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2: diag(2403, ts.DiagnosticCategory.Error, "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403", "Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'."),
The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation: diag(2404, ts.DiagnosticCategory.Error, "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404", "The left-hand side of a 'for...in' statement cannot use a type annotation."),
The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any: diag(2405, ts.DiagnosticCategory.Error, "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405", "The left-hand side of a 'for...in' statement must be of type 'string' or 'any'."),
The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access: diag(2406, ts.DiagnosticCategory.Error, "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406", "The left-hand side of a 'for...in' statement must be a variable or a property access."),
The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter: diag(2407, ts.DiagnosticCategory.Error, "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_2407", "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: diag(2408, ts.DiagnosticCategory.Error, "Setters_cannot_return_a_value_2408", "Setters cannot return a value."),
Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: diag(2409, ts.DiagnosticCategory.Error, "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409", "Return type of constructor signature must be assignable to the instance type of the class."),
The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any: diag(2410, ts.DiagnosticCategory.Error, "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410", "The 'with' statement is not supported. All symbols in a 'with' block will have type 'any'."),
Property_0_of_type_1_is_not_assignable_to_string_index_type_2: diag(2411, ts.DiagnosticCategory.Error, "Property_0_of_type_1_is_not_assignable_to_string_index_type_2_2411", "Property '{0}' of type '{1}' is not assignable to string index type '{2}'."),
Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2: diag(2412, ts.DiagnosticCategory.Error, "Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2_2412", "Property '{0}' of type '{1}' is not assignable to numeric index type '{2}'."),
Numeric_index_type_0_is_not_assignable_to_string_index_type_1: diag(2413, ts.DiagnosticCategory.Error, "Numeric_index_type_0_is_not_assignable_to_string_index_type_1_2413", "Numeric index type '{0}' is not assignable to string index type '{1}'."),
Class_name_cannot_be_0: diag(2414, ts.DiagnosticCategory.Error, "Class_name_cannot_be_0_2414", "Class name cannot be '{0}'."),
Class_0_incorrectly_extends_base_class_1: diag(2415, ts.DiagnosticCategory.Error, "Class_0_incorrectly_extends_base_class_1_2415", "Class '{0}' incorrectly extends base class '{1}'."),
Class_static_side_0_incorrectly_extends_base_class_static_side_1: diag(2417, ts.DiagnosticCategory.Error, "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417", "Class static side '{0}' incorrectly extends base class static side '{1}'."),
Class_0_incorrectly_implements_interface_1: diag(2420, ts.DiagnosticCategory.Error, "Class_0_incorrectly_implements_interface_1_2420", "Class '{0}' incorrectly implements interface '{1}'."),
A_class_may_only_implement_another_class_or_interface: diag(2422, ts.DiagnosticCategory.Error, "A_class_may_only_implement_another_class_or_interface_2422", "A class may only implement another class or interface."),
Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor: diag(2423, ts.DiagnosticCategory.Error, "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423", "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor."),
Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property: diag(2424, ts.DiagnosticCategory.Error, "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_proper_2424", "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property."),
Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function: diag(2425, ts.DiagnosticCategory.Error, "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425", "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function."),
Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function: diag(2426, ts.DiagnosticCategory.Error, "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426", "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function."),
Interface_name_cannot_be_0: diag(2427, ts.DiagnosticCategory.Error, "Interface_name_cannot_be_0_2427", "Interface name cannot be '{0}'."),
All_declarations_of_0_must_have_identical_type_parameters: diag(2428, ts.DiagnosticCategory.Error, "All_declarations_of_0_must_have_identical_type_parameters_2428", "All declarations of '{0}' must have identical type parameters."),
Interface_0_incorrectly_extends_interface_1: diag(2430, ts.DiagnosticCategory.Error, "Interface_0_incorrectly_extends_interface_1_2430", "Interface '{0}' incorrectly extends interface '{1}'."),
Enum_name_cannot_be_0: diag(2431, ts.DiagnosticCategory.Error, "Enum_name_cannot_be_0_2431", "Enum name cannot be '{0}'."),
In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element: diag(2432, ts.DiagnosticCategory.Error, "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432", "In an enum with multiple declarations, only one declaration can omit an initializer for its first enum element."),
A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged: diag(2433, ts.DiagnosticCategory.Error, "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433", "A namespace declaration cannot be in a different file from a class or function with which it is merged."),
A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged: diag(2434, ts.DiagnosticCategory.Error, "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434", "A namespace declaration cannot be located prior to a class or function with which it is merged."),
Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces: diag(2435, ts.DiagnosticCategory.Error, "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435", "Ambient modules cannot be nested in other modules or namespaces."),
Ambient_module_declaration_cannot_specify_relative_module_name: diag(2436, ts.DiagnosticCategory.Error, "Ambient_module_declaration_cannot_specify_relative_module_name_2436", "Ambient module declaration cannot specify relative module name."),
Module_0_is_hidden_by_a_local_declaration_with_the_same_name: diag(2437, ts.DiagnosticCategory.Error, "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437", "Module '{0}' is hidden by a local declaration with the same name."),
Import_name_cannot_be_0: diag(2438, ts.DiagnosticCategory.Error, "Import_name_cannot_be_0_2438", "Import name cannot be '{0}'."),
Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relative_module_name: diag(2439, ts.DiagnosticCategory.Error, "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439", "Import or export declaration in an ambient module declaration cannot reference module through relative module name."),
Import_declaration_conflicts_with_local_declaration_of_0: diag(2440, ts.DiagnosticCategory.Error, "Import_declaration_conflicts_with_local_declaration_of_0_2440", "Import declaration conflicts with local declaration of '{0}'."),
Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module: diag(2441, ts.DiagnosticCategory.Error, "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441", "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of a module."),
Types_have_separate_declarations_of_a_private_property_0: diag(2442, ts.DiagnosticCategory.Error, "Types_have_separate_declarations_of_a_private_property_0_2442", "Types have separate declarations of a private property '{0}'."),
Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2: diag(2443, ts.DiagnosticCategory.Error, "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443", "Property '{0}' is protected but type '{1}' is not a class derived from '{2}'."),
Property_0_is_protected_in_type_1_but_public_in_type_2: diag(2444, ts.DiagnosticCategory.Error, "Property_0_is_protected_in_type_1_but_public_in_type_2_2444", "Property '{0}' is protected in type '{1}' but public in type '{2}'."),
Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses: diag(2445, ts.DiagnosticCategory.Error, "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445", "Property '{0}' is protected and only accessible within class '{1}' and its subclasses."),
Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1: diag(2446, ts.DiagnosticCategory.Error, "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_2446", "Property '{0}' is protected and only accessible through an instance of class '{1}'."),
The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead: diag(2447, ts.DiagnosticCategory.Error, "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447", "The '{0}' operator is not allowed for boolean types. Consider using '{1}' instead."),
Block_scoped_variable_0_used_before_its_declaration: diag(2448, ts.DiagnosticCategory.Error, "Block_scoped_variable_0_used_before_its_declaration_2448", "Block-scoped variable '{0}' used before its declaration."),
Class_0_used_before_its_declaration: diag(2449, ts.DiagnosticCategory.Error, "Class_0_used_before_its_declaration_2449", "Class '{0}' used before its declaration."),
Enum_0_used_before_its_declaration: diag(2450, ts.DiagnosticCategory.Error, "Enum_0_used_before_its_declaration_2450", "Enum '{0}' used before its declaration."),
Cannot_redeclare_block_scoped_variable_0: diag(2451, ts.DiagnosticCategory.Error, "Cannot_redeclare_block_scoped_variable_0_2451", "Cannot redeclare block-scoped variable '{0}'."),
An_enum_member_cannot_have_a_numeric_name: diag(2452, ts.DiagnosticCategory.Error, "An_enum_member_cannot_have_a_numeric_name_2452", "An enum member cannot have a numeric name."),
The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_type_arguments_explicitly: diag(2453, ts.DiagnosticCategory.Error, "The_type_argument_for_type_parameter_0_cannot_be_inferred_from_the_usage_Consider_specifying_the_typ_2453", "The type argument for type parameter '{0}' cannot be inferred from the usage. Consider specifying the type arguments explicitly."),
Variable_0_is_used_before_being_assigned: diag(2454, ts.DiagnosticCategory.Error, "Variable_0_is_used_before_being_assigned_2454", "Variable '{0}' is used before being assigned."),
Type_argument_candidate_1_is_not_a_valid_type_argument_because_it_is_not_a_supertype_of_candidate_0: diag(2455, ts.DiagnosticCategory.Error, "Type_argument_candidate_1_is_not_a_valid_type_argument_because_it_is_not_a_supertype_of_candidate_0_2455", "Type argument candidate '{1}' is not a valid type argument because it is not a supertype of candidate '{0}'."),
Type_alias_0_circularly_references_itself: diag(2456, ts.DiagnosticCategory.Error, "Type_alias_0_circularly_references_itself_2456", "Type alias '{0}' circularly references itself."),
Type_alias_name_cannot_be_0: diag(2457, ts.DiagnosticCategory.Error, "Type_alias_name_cannot_be_0_2457", "Type alias name cannot be '{0}'."),
An_AMD_module_cannot_have_multiple_name_assignments: diag(2458, ts.DiagnosticCategory.Error, "An_AMD_module_cannot_have_multiple_name_assignments_2458", "An AMD module cannot have multiple name assignments."),
Type_0_has_no_property_1_and_no_string_index_signature: diag(2459, ts.DiagnosticCategory.Error, "Type_0_has_no_property_1_and_no_string_index_signature_2459", "Type '{0}' has no property '{1}' and no string index signature."),
Type_0_has_no_property_1: diag(2460, ts.DiagnosticCategory.Error, "Type_0_has_no_property_1_2460", "Type '{0}' has no property '{1}'."),
Type_0_is_not_an_array_type: diag(2461, ts.DiagnosticCategory.Error, "Type_0_is_not_an_array_type_2461", "Type '{0}' is not an array type."),
A_rest_element_must_be_last_in_a_destructuring_pattern: diag(2462, ts.DiagnosticCategory.Error, "A_rest_element_must_be_last_in_a_destructuring_pattern_2462", "A rest element must be last in a destructuring pattern."),
A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature: diag(2463, ts.DiagnosticCategory.Error, "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463", "A binding pattern parameter cannot be optional in an implementation signature."),
A_computed_property_name_must_be_of_type_string_number_symbol_or_any: diag(2464, ts.DiagnosticCategory.Error, "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464", "A computed property name must be of type 'string', 'number', 'symbol', or 'any'."),
this_cannot_be_referenced_in_a_computed_property_name: diag(2465, ts.DiagnosticCategory.Error, "this_cannot_be_referenced_in_a_computed_property_name_2465", "'this' cannot be referenced in a computed property name."),
super_cannot_be_referenced_in_a_computed_property_name: diag(2466, ts.DiagnosticCategory.Error, "super_cannot_be_referenced_in_a_computed_property_name_2466", "'super' cannot be referenced in a computed property name."),
A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type: diag(2467, ts.DiagnosticCategory.Error, "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467", "A computed property name cannot reference a type parameter from its containing type."),
Cannot_find_global_value_0: diag(2468, ts.DiagnosticCategory.Error, "Cannot_find_global_value_0_2468", "Cannot find global value '{0}'."),
The_0_operator_cannot_be_applied_to_type_symbol: diag(2469, ts.DiagnosticCategory.Error, "The_0_operator_cannot_be_applied_to_type_symbol_2469", "The '{0}' operator cannot be applied to type 'symbol'."),
Symbol_reference_does_not_refer_to_the_global_Symbol_constructor_object: diag(2470, ts.DiagnosticCategory.Error, "Symbol_reference_does_not_refer_to_the_global_Symbol_constructor_object_2470", "'Symbol' reference does not refer to the global Symbol constructor object."),
A_computed_property_name_of_the_form_0_must_be_of_type_symbol: diag(2471, ts.DiagnosticCategory.Error, "A_computed_property_name_of_the_form_0_must_be_of_type_symbol_2471", "A computed property name of the form '{0}' must be of type 'symbol'."),
Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher: diag(2472, ts.DiagnosticCategory.Error, "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472", "Spread operator in 'new' expressions is only available when targeting ECMAScript 5 and higher."),
Enum_declarations_must_all_be_const_or_non_const: diag(2473, ts.DiagnosticCategory.Error, "Enum_declarations_must_all_be_const_or_non_const_2473", "Enum declarations must all be const or non-const."),
In_const_enum_declarations_member_initializer_must_be_constant_expression: diag(2474, ts.DiagnosticCategory.Error, "In_const_enum_declarations_member_initializer_must_be_constant_expression_2474", "In 'const' enum declarations member initializer must be constant expression."),
const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment: diag(2475, ts.DiagnosticCategory.Error, "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475", "'const' enums can only be used in property or index access expressions or the right hand side of an import declaration or export assignment."),
A_const_enum_member_can_only_be_accessed_using_a_string_literal: diag(2476, ts.DiagnosticCategory.Error, "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476", "A const enum member can only be accessed using a string literal."),
const_enum_member_initializer_was_evaluated_to_a_non_finite_value: diag(2477, ts.DiagnosticCategory.Error, "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477", "'const' enum member initializer was evaluated to a non-finite value."),
const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN: diag(2478, ts.DiagnosticCategory.Error, "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478", "'const' enum member initializer was evaluated to disallowed value 'NaN'."),
Property_0_does_not_exist_on_const_enum_1: diag(2479, ts.DiagnosticCategory.Error, "Property_0_does_not_exist_on_const_enum_1_2479", "Property '{0}' does not exist on 'const' enum '{1}'."),
let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations: diag(2480, ts.DiagnosticCategory.Error, "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480", "'let' is not allowed to be used as a name in 'let' or 'const' declarations."),
Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1: diag(2481, ts.DiagnosticCategory.Error, "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481", "Cannot initialize outer scoped variable '{0}' in the same scope as block scoped declaration '{1}'."),
The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation: diag(2483, ts.DiagnosticCategory.Error, "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483", "The left-hand side of a 'for...of' statement cannot use a type annotation."),
Export_declaration_conflicts_with_exported_declaration_of_0: diag(2484, ts.DiagnosticCategory.Error, "Export_declaration_conflicts_with_exported_declaration_of_0_2484", "Export declaration conflicts with exported declaration of '{0}'."),
The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access: diag(2487, ts.DiagnosticCategory.Error, "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487", "The left-hand side of a 'for...of' statement must be a variable or a property access."),
Type_must_have_a_Symbol_iterator_method_that_returns_an_iterator: diag(2488, ts.DiagnosticCategory.Error, "Type_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488", "Type must have a '[Symbol.iterator]()' method that returns an iterator."),
An_iterator_must_have_a_next_method: diag(2489, ts.DiagnosticCategory.Error, "An_iterator_must_have_a_next_method_2489", "An iterator must have a 'next()' method."),
The_type_returned_by_the_next_method_of_an_iterator_must_have_a_value_property: diag(2490, ts.DiagnosticCategory.Error, "The_type_returned_by_the_next_method_of_an_iterator_must_have_a_value_property_2490", "The type returned by the 'next()' method of an iterator must have a 'value' property."),
The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern: diag(2491, ts.DiagnosticCategory.Error, "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491", "The left-hand side of a 'for...in' statement cannot be a destructuring pattern."),
Cannot_redeclare_identifier_0_in_catch_clause: diag(2492, ts.DiagnosticCategory.Error, "Cannot_redeclare_identifier_0_in_catch_clause_2492", "Cannot redeclare identifier '{0}' in catch clause."),
Tuple_type_0_with_length_1_cannot_be_assigned_to_tuple_with_length_2: diag(2493, ts.DiagnosticCategory.Error, "Tuple_type_0_with_length_1_cannot_be_assigned_to_tuple_with_length_2_2493", "Tuple type '{0}' with length '{1}' cannot be assigned to tuple with length '{2}'."),
Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher: diag(2494, ts.DiagnosticCategory.Error, "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494", "Using a string in a 'for...of' statement is only supported in ECMAScript 5 and higher."),
Type_0_is_not_an_array_type_or_a_string_type: diag(2495, ts.DiagnosticCategory.Error, "Type_0_is_not_an_array_type_or_a_string_type_2495", "Type '{0}' is not an array type or a string type."),
The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_standard_function_expression: diag(2496, ts.DiagnosticCategory.Error, "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_stand_2496", "The 'arguments' object cannot be referenced in an arrow function in ES3 and ES5. Consider using a standard function expression."),
Module_0_resolves_to_a_non_module_entity_and_cannot_be_imported_using_this_construct: diag(2497, ts.DiagnosticCategory.Error, "Module_0_resolves_to_a_non_module_entity_and_cannot_be_imported_using_this_construct_2497", "Module '{0}' resolves to a non-module entity and cannot be imported using this construct."),
Module_0_uses_export_and_cannot_be_used_with_export_Asterisk: diag(2498, ts.DiagnosticCategory.Error, "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498", "Module '{0}' uses 'export =' and cannot be used with 'export *'."),
An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments: diag(2499, ts.DiagnosticCategory.Error, "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499", "An interface can only extend an identifier/qualified-name with optional type arguments."),
A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments: diag(2500, ts.DiagnosticCategory.Error, "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500", "A class can only implement an identifier/qualified-name with optional type arguments."),
A_rest_element_cannot_contain_a_binding_pattern: diag(2501, ts.DiagnosticCategory.Error, "A_rest_element_cannot_contain_a_binding_pattern_2501", "A rest element cannot contain a binding pattern."),
_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation: diag(2502, ts.DiagnosticCategory.Error, "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502", "'{0}' is referenced directly or indirectly in its own type annotation."),
Cannot_find_namespace_0: diag(2503, ts.DiagnosticCategory.Error, "Cannot_find_namespace_0_2503", "Cannot find namespace '{0}'."),
Type_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator: diag(2504, ts.DiagnosticCategory.Error, "Type_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504", "Type must have a '[Symbol.asyncIterator]()' method that returns an async iterator."),
A_generator_cannot_have_a_void_type_annotation: diag(2505, ts.DiagnosticCategory.Error, "A_generator_cannot_have_a_void_type_annotation_2505", "A generator cannot have a 'void' type annotation."),
_0_is_referenced_directly_or_indirectly_in_its_own_base_expression: diag(2506, ts.DiagnosticCategory.Error, "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506", "'{0}' is referenced directly or indirectly in its own base expression."),
Type_0_is_not_a_constructor_function_type: diag(2507, ts.DiagnosticCategory.Error, "Type_0_is_not_a_constructor_function_type_2507", "Type '{0}' is not a constructor function type."),
No_base_constructor_has_the_specified_number_of_type_arguments: diag(2508, ts.DiagnosticCategory.Error, "No_base_constructor_has_the_specified_number_of_type_arguments_2508", "No base constructor has the specified number of type arguments."),
Base_constructor_return_type_0_is_not_a_class_or_interface_type: diag(2509, ts.DiagnosticCategory.Error, "Base_constructor_return_type_0_is_not_a_class_or_interface_type_2509", "Base constructor return type '{0}' is not a class or interface type."),
Base_constructors_must_all_have_the_same_return_type: diag(2510, ts.DiagnosticCategory.Error, "Base_constructors_must_all_have_the_same_return_type_2510", "Base constructors must all have the same return type."),
Cannot_create_an_instance_of_the_abstract_class_0: diag(2511, ts.DiagnosticCategory.Error, "Cannot_create_an_instance_of_the_abstract_class_0_2511", "Cannot create an instance of the abstract class '{0}'."),
Overload_signatures_must_all_be_abstract_or_non_abstract: diag(2512, ts.DiagnosticCategory.Error, "Overload_signatures_must_all_be_abstract_or_non_abstract_2512", "Overload signatures must all be abstract or non-abstract."),
Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression: diag(2513, ts.DiagnosticCategory.Error, "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513", "Abstract method '{0}' in class '{1}' cannot be accessed via super expression."),
Classes_containing_abstract_methods_must_be_marked_abstract: diag(2514, ts.DiagnosticCategory.Error, "Classes_containing_abstract_methods_must_be_marked_abstract_2514", "Classes containing abstract methods must be marked abstract."),
Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2: diag(2515, ts.DiagnosticCategory.Error, "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515", "Non-abstract class '{0}' does not implement inherited abstract member '{1}' from class '{2}'."),
All_declarations_of_an_abstract_method_must_be_consecutive: diag(2516, ts.DiagnosticCategory.Error, "All_declarations_of_an_abstract_method_must_be_consecutive_2516", "All declarations of an abstract method must be consecutive."),
Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type: diag(2517, ts.DiagnosticCategory.Error, "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517", "Cannot assign an abstract constructor type to a non-abstract constructor type."),
A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard: diag(2518, ts.DiagnosticCategory.Error, "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518", "A 'this'-based type guard is not compatible with a parameter-based type guard."),
An_async_iterator_must_have_a_next_method: diag(2519, ts.DiagnosticCategory.Error, "An_async_iterator_must_have_a_next_method_2519", "An async iterator must have a 'next()' method."),
Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions: diag(2520, ts.DiagnosticCategory.Error, "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520", "Duplicate identifier '{0}'. Compiler uses declaration '{1}' to support async functions."),
Expression_resolves_to_variable_declaration_0_that_compiler_uses_to_support_async_functions: diag(2521, ts.DiagnosticCategory.Error, "Expression_resolves_to_variable_declaration_0_that_compiler_uses_to_support_async_functions_2521", "Expression resolves to variable declaration '{0}' that compiler uses to support async functions."),
The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_using_a_standard_function_or_method: diag(2522, ts.DiagnosticCategory.Error, "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_usi_2522", "The 'arguments' object cannot be referenced in an async function or method in ES3 and ES5. Consider using a standard function or method."),
yield_expressions_cannot_be_used_in_a_parameter_initializer: diag(2523, ts.DiagnosticCategory.Error, "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523", "'yield' expressions cannot be used in a parameter initializer."),
await_expressions_cannot_be_used_in_a_parameter_initializer: diag(2524, ts.DiagnosticCategory.Error, "await_expressions_cannot_be_used_in_a_parameter_initializer_2524", "'await' expressions cannot be used in a parameter initializer."),
Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value: diag(2525, ts.DiagnosticCategory.Error, "Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525", "Initializer provides no value for this binding element and the binding element has no default value."),
A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface: diag(2526, ts.DiagnosticCategory.Error, "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526", "A 'this' type is available only in a non-static member of a class or interface."),
The_inferred_type_of_0_references_an_inaccessible_this_type_A_type_annotation_is_necessary: diag(2527, ts.DiagnosticCategory.Error, "The_inferred_type_of_0_references_an_inaccessible_this_type_A_type_annotation_is_necessary_2527", "The inferred type of '{0}' references an inaccessible 'this' type. A type annotation is necessary."),
A_module_cannot_have_multiple_default_exports: diag(2528, ts.DiagnosticCategory.Error, "A_module_cannot_have_multiple_default_exports_2528", "A module cannot have multiple default exports."),
Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_functions: diag(2529, ts.DiagnosticCategory.Error, "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529", "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of a module containing async functions."),
Property_0_is_incompatible_with_index_signature: diag(2530, ts.DiagnosticCategory.Error, "Property_0_is_incompatible_with_index_signature_2530", "Property '{0}' is incompatible with index signature."),
Object_is_possibly_null: diag(2531, ts.DiagnosticCategory.Error, "Object_is_possibly_null_2531", "Object is possibly 'null'."),
Object_is_possibly_undefined: diag(2532, ts.DiagnosticCategory.Error, "Object_is_possibly_undefined_2532", "Object is possibly 'undefined'."),
Object_is_possibly_null_or_undefined: diag(2533, ts.DiagnosticCategory.Error, "Object_is_possibly_null_or_undefined_2533", "Object is possibly 'null' or 'undefined'."),
A_function_returning_never_cannot_have_a_reachable_end_point: diag(2534, ts.DiagnosticCategory.Error, "A_function_returning_never_cannot_have_a_reachable_end_point_2534", "A function returning 'never' cannot have a reachable end point."),
Enum_type_0_has_members_with_initializers_that_are_not_literals: diag(2535, ts.DiagnosticCategory.Error, "Enum_type_0_has_members_with_initializers_that_are_not_literals_2535", "Enum type '{0}' has members with initializers that are not literals."),
Type_0_cannot_be_used_to_index_type_1: diag(2536, ts.DiagnosticCategory.Error, "Type_0_cannot_be_used_to_index_type_1_2536", "Type '{0}' cannot be used to index type '{1}'."),
Type_0_has_no_matching_index_signature_for_type_1: diag(2537, ts.DiagnosticCategory.Error, "Type_0_has_no_matching_index_signature_for_type_1_2537", "Type '{0}' has no matching index signature for type '{1}'."),
Type_0_cannot_be_used_as_an_index_type: diag(2538, ts.DiagnosticCategory.Error, "Type_0_cannot_be_used_as_an_index_type_2538", "Type '{0}' cannot be used as an index type."),
Cannot_assign_to_0_because_it_is_not_a_variable: diag(2539, ts.DiagnosticCategory.Error, "Cannot_assign_to_0_because_it_is_not_a_variable_2539", "Cannot assign to '{0}' because it is not a variable."),
Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property: diag(2540, ts.DiagnosticCategory.Error, "Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property_2540", "Cannot assign to '{0}' because it is a constant or a read-only property."),
The_target_of_an_assignment_must_be_a_variable_or_a_property_access: diag(2541, ts.DiagnosticCategory.Error, "The_target_of_an_assignment_must_be_a_variable_or_a_property_access_2541", "The target of an assignment must be a variable or a property access."),
Index_signature_in_type_0_only_permits_reading: diag(2542, ts.DiagnosticCategory.Error, "Index_signature_in_type_0_only_permits_reading_2542", "Index signature in type '{0}' only permits reading."),
Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_meta_property_reference: diag(2543, ts.DiagnosticCategory.Error, "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543", "Duplicate identifier '_newTarget'. Compiler uses variable declaration '_newTarget' to capture 'new.target' meta-property reference."),
Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta_property_reference: diag(2544, ts.DiagnosticCategory.Error, "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544", "Expression resolves to variable declaration '_newTarget' that compiler uses to capture 'new.target' meta-property reference."),
A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any: diag(2545, ts.DiagnosticCategory.Error, "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545", "A mixin class must have a constructor with a single rest parameter of type 'any[]'."),
Property_0_has_conflicting_declarations_and_is_inaccessible_in_type_1: diag(2546, ts.DiagnosticCategory.Error, "Property_0_has_conflicting_declarations_and_is_inaccessible_in_type_1_2546", "Property '{0}' has conflicting declarations and is inaccessible in type '{1}'."),
The_type_returned_by_the_next_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_property: diag(2547, ts.DiagnosticCategory.Error, "The_type_returned_by_the_next_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value__2547", "The type returned by the 'next()' method of an async iterator must be a promise for a type with a 'value' property."),
Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator: diag(2548, ts.DiagnosticCategory.Error, "Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548", "Type '{0}' is not an array type or does not have a '[Symbol.iterator]()' method that returns an iterator."),
Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator: diag(2549, ts.DiagnosticCategory.Error, "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549", "Type '{0}' is not an array type or a string type or does not have a '[Symbol.iterator]()' method that returns an iterator."),
Generic_type_instantiation_is_excessively_deep_and_possibly_infinite: diag(2550, ts.DiagnosticCategory.Error, "Generic_type_instantiation_is_excessively_deep_and_possibly_infinite_2550", "Generic type instantiation is excessively deep and possibly infinite."),
Property_0_does_not_exist_on_type_1_Did_you_mean_2: diag(2551, ts.DiagnosticCategory.Error, "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", "Property '{0}' does not exist on type '{1}'. Did you mean '{2}'?"),
Cannot_find_name_0_Did_you_mean_1: diag(2552, ts.DiagnosticCategory.Error, "Cannot_find_name_0_Did_you_mean_1_2552", "Cannot find name '{0}'. Did you mean '{1}'?"),
Computed_values_are_not_permitted_in_an_enum_with_string_valued_members: diag(2553, ts.DiagnosticCategory.Error, "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553", "Computed values are not permitted in an enum with string valued members."),
Expected_0_arguments_but_got_1: diag(2554, ts.DiagnosticCategory.Error, "Expected_0_arguments_but_got_1_2554", "Expected {0} arguments, but got {1}."),
Expected_at_least_0_arguments_but_got_1: diag(2555, ts.DiagnosticCategory.Error, "Expected_at_least_0_arguments_but_got_1_2555", "Expected at least {0} arguments, but got {1}."),
Expected_0_arguments_but_got_a_minimum_of_1: diag(2556, ts.DiagnosticCategory.Error, "Expected_0_arguments_but_got_a_minimum_of_1_2556", "Expected {0} arguments, but got a minimum of {1}."),
Expected_at_least_0_arguments_but_got_a_minimum_of_1: diag(2557, ts.DiagnosticCategory.Error, "Expected_at_least_0_arguments_but_got_a_minimum_of_1_2557", "Expected at least {0} arguments, but got a minimum of {1}."),
Expected_0_type_arguments_but_got_1: diag(2558, ts.DiagnosticCategory.Error, "Expected_0_type_arguments_but_got_1_2558", "Expected {0} type arguments, but got {1}."),
Type_0_has_no_properties_in_common_with_type_1: diag(2559, ts.DiagnosticCategory.Error, "Type_0_has_no_properties_in_common_with_type_1_2559", "Type '{0}' has no properties in common with type '{1}'."),
Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it: diag(2560, ts.DiagnosticCategory.Error, "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560", "Value of type '{0}' has no properties in common with type '{1}'. Did you mean to call it?"),
Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_write_2: diag(2561, ts.DiagnosticCategory.Error, "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561", "Object literal may only specify known properties, but '{0}' does not exist in type '{1}'. Did you mean to write '{2}'?"),
Base_class_expressions_cannot_reference_class_type_parameters: diag(2562, ts.DiagnosticCategory.Error, "Base_class_expressions_cannot_reference_class_type_parameters_2562", "Base class expressions cannot reference class type parameters."),
The_containing_function_or_module_body_is_too_large_for_control_flow_analysis: diag(2563, ts.DiagnosticCategory.Error, "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563", "The containing function or module body is too large for control flow analysis."),
JSX_element_attributes_type_0_may_not_be_a_union_type: diag(2600, ts.DiagnosticCategory.Error, "JSX_element_attributes_type_0_may_not_be_a_union_type_2600", "JSX element attributes type '{0}' may not be a union type."),
The_return_type_of_a_JSX_element_constructor_must_return_an_object_type: diag(2601, ts.DiagnosticCategory.Error, "The_return_type_of_a_JSX_element_constructor_must_return_an_object_type_2601", "The return type of a JSX element constructor must return an object type."),
JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist: diag(2602, ts.DiagnosticCategory.Error, "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602", "JSX element implicitly has type 'any' because the global type 'JSX.Element' does not exist."),
Property_0_in_type_1_is_not_assignable_to_type_2: diag(2603, ts.DiagnosticCategory.Error, "Property_0_in_type_1_is_not_assignable_to_type_2_2603", "Property '{0}' in type '{1}' is not assignable to type '{2}'."),
JSX_element_type_0_does_not_have_any_construct_or_call_signatures: diag(2604, ts.DiagnosticCategory.Error, "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604", "JSX element type '{0}' does not have any construct or call signatures."),
JSX_element_type_0_is_not_a_constructor_function_for_JSX_elements: diag(2605, ts.DiagnosticCategory.Error, "JSX_element_type_0_is_not_a_constructor_function_for_JSX_elements_2605", "JSX element type '{0}' is not a constructor function for JSX elements."),
Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property: diag(2606, ts.DiagnosticCategory.Error, "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606", "Property '{0}' of JSX spread attribute is not assignable to target property."),
JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property: diag(2607, ts.DiagnosticCategory.Error, "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607", "JSX element class does not support attributes because it does not have a '{0}' property."),
The_global_type_JSX_0_may_not_have_more_than_one_property: diag(2608, ts.DiagnosticCategory.Error, "The_global_type_JSX_0_may_not_have_more_than_one_property_2608", "The global type 'JSX.{0}' may not have more than one property."),
JSX_spread_child_must_be_an_array_type: diag(2609, ts.DiagnosticCategory.Error, "JSX_spread_child_must_be_an_array_type_2609", "JSX spread child must be an array type."),
Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity: diag(2649, ts.DiagnosticCategory.Error, "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649", "Cannot augment module '{0}' with value exports because it resolves to a non-module entity."),
A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums: diag(2651, ts.DiagnosticCategory.Error, "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651", "A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums."),
Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_default_0_declaration_instead: diag(2652, ts.DiagnosticCategory.Error, "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652", "Merged declaration '{0}' cannot include a default export declaration. Consider adding a separate 'export default {0}' declaration instead."),
Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1: diag(2653, ts.DiagnosticCategory.Error, "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653", "Non-abstract class expression does not implement inherited abstract member '{0}' from class '{1}'."),
Exported_external_package_typings_file_cannot_contain_tripleslash_references_Please_contact_the_package_author_to_update_the_package_definition: diag(2654, ts.DiagnosticCategory.Error, "Exported_external_package_typings_file_cannot_contain_tripleslash_references_Please_contact_the_pack_2654", "Exported external package typings file cannot contain tripleslash references. Please contact the package author to update the package definition."),
Exported_external_package_typings_file_0_is_not_a_module_Please_contact_the_package_author_to_update_the_package_definition: diag(2656, ts.DiagnosticCategory.Error, "Exported_external_package_typings_file_0_is_not_a_module_Please_contact_the_package_author_to_update_2656", "Exported external package typings file '{0}' is not a module. Please contact the package author to update the package definition."),
JSX_expressions_must_have_one_parent_element: diag(2657, ts.DiagnosticCategory.Error, "JSX_expressions_must_have_one_parent_element_2657", "JSX expressions must have one parent element."),
Type_0_provides_no_match_for_the_signature_1: diag(2658, ts.DiagnosticCategory.Error, "Type_0_provides_no_match_for_the_signature_1_2658", "Type '{0}' provides no match for the signature '{1}'."),
super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_higher: diag(2659, ts.DiagnosticCategory.Error, "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659", "'super' is only allowed in members of object literal expressions when option 'target' is 'ES2015' or higher."),
super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions: diag(2660, ts.DiagnosticCategory.Error, "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660", "'super' can only be referenced in members of derived classes or object literal expressions."),
Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module: diag(2661, ts.DiagnosticCategory.Error, "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661", "Cannot export '{0}'. Only local declarations can be exported from a module."),
Cannot_find_name_0_Did_you_mean_the_static_member_1_0: diag(2662, ts.DiagnosticCategory.Error, "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662", "Cannot find name '{0}'. Did you mean the static member '{1}.{0}'?"),
Cannot_find_name_0_Did_you_mean_the_instance_member_this_0: diag(2663, ts.DiagnosticCategory.Error, "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663", "Cannot find name '{0}'. Did you mean the instance member 'this.{0}'?"),
Invalid_module_name_in_augmentation_module_0_cannot_be_found: diag(2664, ts.DiagnosticCategory.Error, "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664", "Invalid module name in augmentation, module '{0}' cannot be found."),
Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augmented: diag(2665, ts.DiagnosticCategory.Error, "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665", "Invalid module name in augmentation. Module '{0}' resolves to an untyped module at '{1}', which cannot be augmented."),
Exports_and_export_assignments_are_not_permitted_in_module_augmentations: diag(2666, ts.DiagnosticCategory.Error, "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666", "Exports and export assignments are not permitted in module augmentations."),
Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_module: diag(2667, ts.DiagnosticCategory.Error, "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667", "Imports are not permitted in module augmentations. Consider moving them to the enclosing external module."),
export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always_visible: diag(2668, ts.DiagnosticCategory.Error, "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668", "'export' modifier cannot be applied to ambient modules and module augmentations since they are always visible."),
Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_declarations: diag(2669, ts.DiagnosticCategory.Error, "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669", "Augmentations for the global scope can only be directly nested in external modules or ambient module declarations."),
Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambient_context: diag(2670, ts.DiagnosticCategory.Error, "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670", "Augmentations for the global scope should have 'declare' modifier unless they appear in already ambient context."),
Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity: diag(2671, ts.DiagnosticCategory.Error, "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671", "Cannot augment module '{0}' because it resolves to a non-module entity."),
Cannot_assign_a_0_constructor_type_to_a_1_constructor_type: diag(2672, ts.DiagnosticCategory.Error, "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672", "Cannot assign a '{0}' constructor type to a '{1}' constructor type."),
Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration: diag(2673, ts.DiagnosticCategory.Error, "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673", "Constructor of class '{0}' is private and only accessible within the class declaration."),
Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration: diag(2674, ts.DiagnosticCategory.Error, "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674", "Constructor of class '{0}' is protected and only accessible within the class declaration."),
Cannot_extend_a_class_0_Class_constructor_is_marked_as_private: diag(2675, ts.DiagnosticCategory.Error, "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675", "Cannot extend a class '{0}'. Class constructor is marked as private."),
Accessors_must_both_be_abstract_or_non_abstract: diag(2676, ts.DiagnosticCategory.Error, "Accessors_must_both_be_abstract_or_non_abstract_2676", "Accessors must both be abstract or non-abstract."),
A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type: diag(2677, ts.DiagnosticCategory.Error, "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677", "A type predicate's type must be assignable to its parameter's type."),
Type_0_is_not_comparable_to_type_1: diag(2678, ts.DiagnosticCategory.Error, "Type_0_is_not_comparable_to_type_1_2678", "Type '{0}' is not comparable to type '{1}'."),
A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void: diag(2679, ts.DiagnosticCategory.Error, "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679", "A function that is called with the 'new' keyword cannot have a 'this' type that is 'void'."),
A_0_parameter_must_be_the_first_parameter: diag(2680, ts.DiagnosticCategory.Error, "A_0_parameter_must_be_the_first_parameter_2680", "A '{0}' parameter must be the first parameter."),
A_constructor_cannot_have_a_this_parameter: diag(2681, ts.DiagnosticCategory.Error, "A_constructor_cannot_have_a_this_parameter_2681", "A constructor cannot have a 'this' parameter."),
get_and_set_accessor_must_have_the_same_this_type: diag(2682, ts.DiagnosticCategory.Error, "get_and_set_accessor_must_have_the_same_this_type_2682", "'get' and 'set' accessor must have the same 'this' type."),
this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation: diag(2683, ts.DiagnosticCategory.Error, "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683", "'this' implicitly has type 'any' because it does not have a type annotation."),
The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1: diag(2684, ts.DiagnosticCategory.Error, "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684", "The 'this' context of type '{0}' is not assignable to method's 'this' of type '{1}'."),
The_this_types_of_each_signature_are_incompatible: diag(2685, ts.DiagnosticCategory.Error, "The_this_types_of_each_signature_are_incompatible_2685", "The 'this' types of each signature are incompatible."),
_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead: diag(2686, ts.DiagnosticCategory.Error, "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686", "'{0}' refers to a UMD global, but the current file is a module. Consider adding an import instead."),
All_declarations_of_0_must_have_identical_modifiers: diag(2687, ts.DiagnosticCategory.Error, "All_declarations_of_0_must_have_identical_modifiers_2687", "All declarations of '{0}' must have identical modifiers."),
Cannot_find_type_definition_file_for_0: diag(2688, ts.DiagnosticCategory.Error, "Cannot_find_type_definition_file_for_0_2688", "Cannot find type definition file for '{0}'."),
Cannot_extend_an_interface_0_Did_you_mean_implements: diag(2689, ts.DiagnosticCategory.Error, "Cannot_extend_an_interface_0_Did_you_mean_implements_2689", "Cannot extend an interface '{0}'. Did you mean 'implements'?"),
An_import_path_cannot_end_with_a_0_extension_Consider_importing_1_instead: diag(2691, ts.DiagnosticCategory.Error, "An_import_path_cannot_end_with_a_0_extension_Consider_importing_1_instead_2691", "An import path cannot end with a '{0}' extension. Consider importing '{1}' instead."),
_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible: diag(2692, ts.DiagnosticCategory.Error, "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692", "'{0}' is a primitive, but '{1}' is a wrapper object. Prefer using '{0}' when possible."),
_0_only_refers_to_a_type_but_is_being_used_as_a_value_here: diag(2693, ts.DiagnosticCategory.Error, "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693", "'{0}' only refers to a type, but is being used as a value here."),
Namespace_0_has_no_exported_member_1: diag(2694, ts.DiagnosticCategory.Error, "Namespace_0_has_no_exported_member_1_2694", "Namespace '{0}' has no exported member '{1}'."),
Left_side_of_comma_operator_is_unused_and_has_no_side_effects: diag(2695, ts.DiagnosticCategory.Error, "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695", "Left side of comma operator is unused and has no side effects."),
The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead: diag(2696, ts.DiagnosticCategory.Error, "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696", "The 'Object' type is assignable to very few other types. Did you mean to use the 'any' type instead?"),
An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES2015_in_your_lib_option: diag(2697, ts.DiagnosticCategory.Error, "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697", "An async function or method must return a 'Promise'. Make sure you have a declaration for 'Promise' or include 'ES2015' in your `--lib` option."),
Spread_types_may_only_be_created_from_object_types: diag(2698, ts.DiagnosticCategory.Error, "Spread_types_may_only_be_created_from_object_types_2698", "Spread types may only be created from object types."),
Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1: diag(2699, ts.DiagnosticCategory.Error, "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699", "Static property '{0}' conflicts with built-in property 'Function.{0}' of constructor function '{1}'."),
Rest_types_may_only_be_created_from_object_types: diag(2700, ts.DiagnosticCategory.Error, "Rest_types_may_only_be_created_from_object_types_2700", "Rest types may only be created from object types."),
The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access: diag(2701, ts.DiagnosticCategory.Error, "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701", "The target of an object rest assignment must be a variable or a property access."),
_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here: diag(2702, ts.DiagnosticCategory.Error, "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702", "'{0}' only refers to a type, but is being used as a namespace here."),
The_operand_of_a_delete_operator_must_be_a_property_reference: diag(2703, ts.DiagnosticCategory.Error, "The_operand_of_a_delete_operator_must_be_a_property_reference_2703", "The operand of a delete operator must be a property reference."),
The_operand_of_a_delete_operator_cannot_be_a_read_only_property: diag(2704, ts.DiagnosticCategory.Error, "The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704", "The operand of a delete operator cannot be a read-only property."),
An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option: diag(2705, ts.DiagnosticCategory.Error, "An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705", "An async function or method in ES5/ES3 requires the 'Promise' constructor. Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your `--lib` option."),
Required_type_parameters_may_not_follow_optional_type_parameters: diag(2706, ts.DiagnosticCategory.Error, "Required_type_parameters_may_not_follow_optional_type_parameters_2706", "Required type parameters may not follow optional type parameters."),
Generic_type_0_requires_between_1_and_2_type_arguments: diag(2707, ts.DiagnosticCategory.Error, "Generic_type_0_requires_between_1_and_2_type_arguments_2707", "Generic type '{0}' requires between {1} and {2} type arguments."),
Cannot_use_namespace_0_as_a_value: diag(2708, ts.DiagnosticCategory.Error, "Cannot_use_namespace_0_as_a_value_2708", "Cannot use namespace '{0}' as a value."),
Cannot_use_namespace_0_as_a_type: diag(2709, ts.DiagnosticCategory.Error, "Cannot_use_namespace_0_as_a_type_2709", "Cannot use namespace '{0}' as a type."),
_0_are_specified_twice_The_attribute_named_0_will_be_overwritten: diag(2710, ts.DiagnosticCategory.Error, "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710", "'{0}' are specified twice. The attribute named '{0}' will be overwritten."),
A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES2015_in_your_lib_option: diag(2711, ts.DiagnosticCategory.Error, "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711", "A dynamic import call returns a 'Promise'. Make sure you have a declaration for 'Promise' or include 'ES2015' in your `--lib` option."),
A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option: diag(2712, ts.DiagnosticCategory.Error, "A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712", "A dynamic import call in ES5/ES3 requires the 'Promise' constructor. Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your `--lib` option."),
Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_property_1_in_0_with_0_1: diag(2713, ts.DiagnosticCategory.Error, "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713", "Cannot access '{0}.{1}' because '{0}' is a type, but not a namespace. Did you mean to retrieve the type of the property '{1}' in '{0}' with '{0}[\"{1}\"]'?"),
The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context: diag(2714, ts.DiagnosticCategory.Error, "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714", "The expression of an export assignment must be an identifier or qualified name in an ambient context."),
Type_parameter_0_has_a_circular_default: diag(2716, ts.DiagnosticCategory.Error, "Type_parameter_0_has_a_circular_default_2716", "Type parameter '{0}' has a circular default."),
Import_declaration_0_is_using_private_name_1: diag(4000, ts.DiagnosticCategory.Error, "Import_declaration_0_is_using_private_name_1_4000", "Import declaration '{0}' is using private name '{1}'."),
Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: diag(4002, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002", "Type parameter '{0}' of exported class has or is using private name '{1}'."),
Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: diag(4004, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004", "Type parameter '{0}' of exported interface has or is using private name '{1}'."),
Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: diag(4006, ts.DiagnosticCategory.Error, "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006", "Type parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'."),
Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: diag(4008, ts.DiagnosticCategory.Error, "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008", "Type parameter '{0}' of call signature from exported interface has or is using private name '{1}'."),
Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: diag(4010, ts.DiagnosticCategory.Error, "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010", "Type parameter '{0}' of public static method from exported class has or is using private name '{1}'."),
Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: diag(4012, ts.DiagnosticCategory.Error, "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012", "Type parameter '{0}' of public method from exported class has or is using private name '{1}'."),
Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: diag(4014, ts.DiagnosticCategory.Error, "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014", "Type parameter '{0}' of method from exported interface has or is using private name '{1}'."),
Type_parameter_0_of_exported_function_has_or_is_using_private_name_1: diag(4016, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016", "Type parameter '{0}' of exported function has or is using private name '{1}'."),
Implements_clause_of_exported_class_0_has_or_is_using_private_name_1: diag(4019, ts.DiagnosticCategory.Error, "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019", "Implements clause of exported class '{0}' has or is using private name '{1}'."),
extends_clause_of_exported_class_0_has_or_is_using_private_name_1: diag(4020, ts.DiagnosticCategory.Error, "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020", "'extends' clause of exported class '{0}' has or is using private name '{1}'."),
extends_clause_of_exported_interface_0_has_or_is_using_private_name_1: diag(4022, ts.DiagnosticCategory.Error, "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022", "'extends' clause of exported interface '{0}' has or is using private name '{1}'."),
Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: diag(4023, ts.DiagnosticCategory.Error, "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023", "Exported variable '{0}' has or is using name '{1}' from external module {2} but cannot be named."),
Exported_variable_0_has_or_is_using_name_1_from_private_module_2: diag(4024, ts.DiagnosticCategory.Error, "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024", "Exported variable '{0}' has or is using name '{1}' from private module '{2}'."),
Exported_variable_0_has_or_is_using_private_name_1: diag(4025, ts.DiagnosticCategory.Error, "Exported_variable_0_has_or_is_using_private_name_1_4025", "Exported variable '{0}' has or is using private name '{1}'."),
Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: diag(4026, ts.DiagnosticCategory.Error, "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026", "Public static property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named."),
Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: diag(4027, ts.DiagnosticCategory.Error, "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027", "Public static property '{0}' of exported class has or is using name '{1}' from private module '{2}'."),
Public_static_property_0_of_exported_class_has_or_is_using_private_name_1: diag(4028, ts.DiagnosticCategory.Error, "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028", "Public static property '{0}' of exported class has or is using private name '{1}'."),
Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: diag(4029, ts.DiagnosticCategory.Error, "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029", "Public property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named."),
Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: diag(4030, ts.DiagnosticCategory.Error, "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030", "Public property '{0}' of exported class has or is using name '{1}' from private module '{2}'."),
Public_property_0_of_exported_class_has_or_is_using_private_name_1: diag(4031, ts.DiagnosticCategory.Error, "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031", "Public property '{0}' of exported class has or is using private name '{1}'."),
Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2: diag(4032, ts.DiagnosticCategory.Error, "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032", "Property '{0}' of exported interface has or is using name '{1}' from private module '{2}'."),
Property_0_of_exported_interface_has_or_is_using_private_name_1: diag(4033, ts.DiagnosticCategory.Error, "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033", "Property '{0}' of exported interface has or is using private name '{1}'."),
Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2: diag(4034, ts.DiagnosticCategory.Error, "Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_4034", "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: diag(4035, ts.DiagnosticCategory.Error, "Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1_4035", "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: diag(4036, ts.DiagnosticCategory.Error, "Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_4036", "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: diag(4037, ts.DiagnosticCategory.Error, "Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1_4037", "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: diag(4038, ts.DiagnosticCategory.Error, "Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_externa_4038", "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: diag(4039, ts.DiagnosticCategory.Error, "Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_4039", "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: diag(4040, ts.DiagnosticCategory.Error, "Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0_4040", "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: diag(4041, ts.DiagnosticCategory.Error, "Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_modul_4041", "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: diag(4042, ts.DiagnosticCategory.Error, "Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_4042", "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: diag(4043, ts.DiagnosticCategory.Error, "Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0_4043", "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: diag(4044, ts.DiagnosticCategory.Error, "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044", "Return type of constructor signature from exported interface has or is using name '{0}' from private module '{1}'."),
Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0: diag(4045, ts.DiagnosticCategory.Error, "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045", "Return type of constructor signature from exported interface has or is using private name '{0}'."),
Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: diag(4046, ts.DiagnosticCategory.Error, "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046", "Return type of call signature from exported interface has or is using name '{0}' from private module '{1}'."),
Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0: diag(4047, ts.DiagnosticCategory.Error, "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047", "Return type of call signature from exported interface has or is using private name '{0}'."),
Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: diag(4048, ts.DiagnosticCategory.Error, "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048", "Return type of index signature from exported interface has or is using name '{0}' from private module '{1}'."),
Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0: diag(4049, ts.DiagnosticCategory.Error, "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049", "Return type of index signature from exported interface has or is using private name '{0}'."),
Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: diag(4050, ts.DiagnosticCategory.Error, "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050", "Return type of public static method from exported class has or is using name '{0}' from external module {1} but cannot be named."),
Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1: diag(4051, ts.DiagnosticCategory.Error, "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051", "Return type of public static method from exported class has or is using name '{0}' from private module '{1}'."),
Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0: diag(4052, ts.DiagnosticCategory.Error, "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052", "Return type of public static method from exported class has or is using private name '{0}'."),
Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: diag(4053, ts.DiagnosticCategory.Error, "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053", "Return type of public method from exported class has or is using name '{0}' from external module {1} but cannot be named."),
Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1: diag(4054, ts.DiagnosticCategory.Error, "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054", "Return type of public method from exported class has or is using name '{0}' from private module '{1}'."),
Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0: diag(4055, ts.DiagnosticCategory.Error, "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055", "Return type of public method from exported class has or is using private name '{0}'."),
Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1: diag(4056, ts.DiagnosticCategory.Error, "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056", "Return type of method from exported interface has or is using name '{0}' from private module '{1}'."),
Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0: diag(4057, ts.DiagnosticCategory.Error, "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057", "Return type of method from exported interface has or is using private name '{0}'."),
Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: diag(4058, ts.DiagnosticCategory.Error, "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058", "Return type of exported function has or is using name '{0}' from external module {1} but cannot be named."),
Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1: diag(4059, ts.DiagnosticCategory.Error, "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059", "Return type of exported function has or is using name '{0}' from private module '{1}'."),
Return_type_of_exported_function_has_or_is_using_private_name_0: diag(4060, ts.DiagnosticCategory.Error, "Return_type_of_exported_function_has_or_is_using_private_name_0_4060", "Return type of exported function has or is using private name '{0}'."),
Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: diag(4061, ts.DiagnosticCategory.Error, "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061", "Parameter '{0}' of constructor from exported class has or is using name '{1}' from external module {2} but cannot be named."),
Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2: diag(4062, ts.DiagnosticCategory.Error, "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062", "Parameter '{0}' of constructor from exported class has or is using name '{1}' from private module '{2}'."),
Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1: diag(4063, ts.DiagnosticCategory.Error, "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063", "Parameter '{0}' of constructor from exported class has or is using private name '{1}'."),
Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: diag(4064, ts.DiagnosticCategory.Error, "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064", "Parameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'."),
Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: diag(4065, ts.DiagnosticCategory.Error, "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065", "Parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'."),
Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: diag(4066, ts.DiagnosticCategory.Error, "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066", "Parameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'."),
Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: diag(4067, ts.DiagnosticCategory.Error, "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067", "Parameter '{0}' of call signature from exported interface has or is using private name '{1}'."),
Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: diag(4068, ts.DiagnosticCategory.Error, "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068", "Parameter '{0}' of public static method from exported class has or is using name '{1}' from external module {2} but cannot be named."),
Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: diag(4069, ts.DiagnosticCategory.Error, "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069", "Parameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'."),
Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: diag(4070, ts.DiagnosticCategory.Error, "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070", "Parameter '{0}' of public static method from exported class has or is using private name '{1}'."),
Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: diag(4071, ts.DiagnosticCategory.Error, "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071", "Parameter '{0}' of public method from exported class has or is using name '{1}' from external module {2} but cannot be named."),
Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: diag(4072, ts.DiagnosticCategory.Error, "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072", "Parameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'."),
Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: diag(4073, ts.DiagnosticCategory.Error, "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073", "Parameter '{0}' of public method from exported class has or is using private name '{1}'."),
Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2: diag(4074, ts.DiagnosticCategory.Error, "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074", "Parameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'."),
Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: diag(4075, ts.DiagnosticCategory.Error, "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075", "Parameter '{0}' of method from exported interface has or is using private name '{1}'."),
Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: diag(4076, ts.DiagnosticCategory.Error, "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076", "Parameter '{0}' of exported function has or is using name '{1}' from external module {2} but cannot be named."),
Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2: diag(4077, ts.DiagnosticCategory.Error, "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077", "Parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'."),
Parameter_0_of_exported_function_has_or_is_using_private_name_1: diag(4078, ts.DiagnosticCategory.Error, "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078", "Parameter '{0}' of exported function has or is using private name '{1}'."),
Exported_type_alias_0_has_or_is_using_private_name_1: diag(4081, ts.DiagnosticCategory.Error, "Exported_type_alias_0_has_or_is_using_private_name_1_4081", "Exported type alias '{0}' has or is using private name '{1}'."),
Default_export_of_the_module_has_or_is_using_private_name_0: diag(4082, ts.DiagnosticCategory.Error, "Default_export_of_the_module_has_or_is_using_private_name_0_4082", "Default export of the module has or is using private name '{0}'."),
Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1: diag(4083, ts.DiagnosticCategory.Error, "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083", "Type parameter '{0}' of exported type alias has or is using private name '{1}'."),
Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_library_to_resolve_the_conflict: diag(4090, ts.DiagnosticCategory.Message, "Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_librar_4090", "Conflicting definitions for '{0}' found at '{1}' and '{2}'. Consider installing a specific version of this library to resolve the conflict."),
Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: diag(4091, ts.DiagnosticCategory.Error, "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091", "Parameter '{0}' of index signature from exported interface has or is using name '{1}' from private module '{2}'."),
Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1: diag(4092, ts.DiagnosticCategory.Error, "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092", "Parameter '{0}' of index signature from exported interface has or is using private name '{1}'."),
Property_0_of_exported_class_expression_may_not_be_private_or_protected: diag(4094, ts.DiagnosticCategory.Error, "Property_0_of_exported_class_expression_may_not_be_private_or_protected_4094", "Property '{0}' of exported class expression may not be private or protected."),
The_current_host_does_not_support_the_0_option: diag(5001, ts.DiagnosticCategory.Error, "The_current_host_does_not_support_the_0_option_5001", "The current host does not support the '{0}' option."),
Cannot_find_the_common_subdirectory_path_for_the_input_files: diag(5009, ts.DiagnosticCategory.Error, "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009", "Cannot find the common subdirectory path for the input files."),
File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0: diag(5010, ts.DiagnosticCategory.Error, "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010", "File specification cannot end in a recursive directory wildcard ('**'): '{0}'."),
File_specification_cannot_contain_multiple_recursive_directory_wildcards_Asterisk_Asterisk_Colon_0: diag(5011, ts.DiagnosticCategory.Error, "File_specification_cannot_contain_multiple_recursive_directory_wildcards_Asterisk_Asterisk_Colon_0_5011", "File specification cannot contain multiple recursive directory wildcards ('**'): '{0}'."),
Cannot_read_file_0_Colon_1: diag(5012, ts.DiagnosticCategory.Error, "Cannot_read_file_0_Colon_1_5012", "Cannot read file '{0}': {1}."),
Failed_to_parse_file_0_Colon_1: diag(5014, ts.DiagnosticCategory.Error, "Failed_to_parse_file_0_Colon_1_5014", "Failed to parse file '{0}': {1}."),
Unknown_compiler_option_0: diag(5023, ts.DiagnosticCategory.Error, "Unknown_compiler_option_0_5023", "Unknown compiler option '{0}'."),
Compiler_option_0_requires_a_value_of_type_1: diag(5024, ts.DiagnosticCategory.Error, "Compiler_option_0_requires_a_value_of_type_1_5024", "Compiler option '{0}' requires a value of type {1}."),
Could_not_write_file_0_Colon_1: diag(5033, ts.DiagnosticCategory.Error, "Could_not_write_file_0_Colon_1_5033", "Could not write file '{0}': {1}."),
Option_project_cannot_be_mixed_with_source_files_on_a_command_line: diag(5042, ts.DiagnosticCategory.Error, "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042", "Option 'project' cannot be mixed with source files on a command line."),
Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES2015_or_higher: diag(5047, ts.DiagnosticCategory.Error, "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047", "Option 'isolatedModules' can only be used when either option '--module' is provided or option 'target' is 'ES2015' or higher."),
Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided: diag(5051, ts.DiagnosticCategory.Error, "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051", "Option '{0} can only be used when either option '--inlineSourceMap' or option '--sourceMap' is provided."),
Option_0_cannot_be_specified_without_specifying_option_1: diag(5052, ts.DiagnosticCategory.Error, "Option_0_cannot_be_specified_without_specifying_option_1_5052", "Option '{0}' cannot be specified without specifying option '{1}'."),
Option_0_cannot_be_specified_with_option_1: diag(5053, ts.DiagnosticCategory.Error, "Option_0_cannot_be_specified_with_option_1_5053", "Option '{0}' cannot be specified with option '{1}'."),
A_tsconfig_json_file_is_already_defined_at_Colon_0: diag(5054, ts.DiagnosticCategory.Error, "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054", "A 'tsconfig.json' file is already defined at: '{0}'."),
Cannot_write_file_0_because_it_would_overwrite_input_file: diag(5055, ts.DiagnosticCategory.Error, "Cannot_write_file_0_because_it_would_overwrite_input_file_5055", "Cannot write file '{0}' because it would overwrite input file."),
Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files: diag(5056, ts.DiagnosticCategory.Error, "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056", "Cannot write file '{0}' because it would be overwritten by multiple input files."),
Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0: diag(5057, ts.DiagnosticCategory.Error, "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057", "Cannot find a tsconfig.json file at the specified directory: '{0}'."),
The_specified_path_does_not_exist_Colon_0: diag(5058, ts.DiagnosticCategory.Error, "The_specified_path_does_not_exist_Colon_0_5058", "The specified path does not exist: '{0}'."),
Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier: diag(5059, ts.DiagnosticCategory.Error, "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059", "Invalid value for '--reactNamespace'. '{0}' is not a valid identifier."),
Option_paths_cannot_be_used_without_specifying_baseUrl_option: diag(5060, ts.DiagnosticCategory.Error, "Option_paths_cannot_be_used_without_specifying_baseUrl_option_5060", "Option 'paths' cannot be used without specifying '--baseUrl' option."),
Pattern_0_can_have_at_most_one_Asterisk_character: diag(5061, ts.DiagnosticCategory.Error, "Pattern_0_can_have_at_most_one_Asterisk_character_5061", "Pattern '{0}' can have at most one '*' character."),
Substitution_0_in_pattern_1_in_can_have_at_most_one_Asterisk_character: diag(5062, ts.DiagnosticCategory.Error, "Substitution_0_in_pattern_1_in_can_have_at_most_one_Asterisk_character_5062", "Substitution '{0}' in pattern '{1}' in can have at most one '*' character."),
Substitutions_for_pattern_0_should_be_an_array: diag(5063, ts.DiagnosticCategory.Error, "Substitutions_for_pattern_0_should_be_an_array_5063", "Substitutions for pattern '{0}' should be an array."),
Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2: diag(5064, ts.DiagnosticCategory.Error, "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064", "Substitution '{0}' for pattern '{1}' has incorrect type, expected 'string', got '{2}'."),
File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0: diag(5065, ts.DiagnosticCategory.Error, "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065", "File specification cannot contain a parent directory ('..') that appears after a recursive directory wildcard ('**'): '{0}'."),
Substitutions_for_pattern_0_shouldn_t_be_an_empty_array: diag(5066, ts.DiagnosticCategory.Error, "Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066", "Substitutions for pattern '{0}' shouldn't be an empty array."),
Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name: diag(5067, ts.DiagnosticCategory.Error, "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067", "Invalid value for 'jsxFactory'. '{0}' is not a valid identifier or qualified-name."),
Concatenate_and_emit_output_to_single_file: diag(6001, ts.DiagnosticCategory.Message, "Concatenate_and_emit_output_to_single_file_6001", "Concatenate and emit output to single file."),
Generates_corresponding_d_ts_file: diag(6002, ts.DiagnosticCategory.Message, "Generates_corresponding_d_ts_file_6002", "Generates corresponding '.d.ts' file."),
Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: diag(6003, ts.DiagnosticCategory.Message, "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6003", "Specify the location where debugger should locate map files instead of generated locations."),
Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations: diag(6004, ts.DiagnosticCategory.Message, "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004", "Specify the location where debugger should locate TypeScript files instead of source locations."),
Watch_input_files: diag(6005, ts.DiagnosticCategory.Message, "Watch_input_files_6005", "Watch input files."),
Redirect_output_structure_to_the_directory: diag(6006, ts.DiagnosticCategory.Message, "Redirect_output_structure_to_the_directory_6006", "Redirect output structure to the directory."),
Do_not_erase_const_enum_declarations_in_generated_code: diag(6007, ts.DiagnosticCategory.Message, "Do_not_erase_const_enum_declarations_in_generated_code_6007", "Do not erase const enum declarations in generated code."),
Do_not_emit_outputs_if_any_errors_were_reported: diag(6008, ts.DiagnosticCategory.Message, "Do_not_emit_outputs_if_any_errors_were_reported_6008", "Do not emit outputs if any errors were reported."),
Do_not_emit_comments_to_output: diag(6009, ts.DiagnosticCategory.Message, "Do_not_emit_comments_to_output_6009", "Do not emit comments to output."),
Do_not_emit_outputs: diag(6010, ts.DiagnosticCategory.Message, "Do_not_emit_outputs_6010", "Do not emit outputs."),
Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typechecking: diag(6011, ts.DiagnosticCategory.Message, "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011", "Allow default imports from modules with no default export. This does not affect code emit, just typechecking."),
Skip_type_checking_of_declaration_files: diag(6012, ts.DiagnosticCategory.Message, "Skip_type_checking_of_declaration_files_6012", "Skip type checking of declaration files."),
Do_not_resolve_the_real_path_of_symlinks: diag(6013, ts.DiagnosticCategory.Message, "Do_not_resolve_the_real_path_of_symlinks_6013", "Do not resolve the real path of symlinks."),
Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_or_ESNEXT: diag(6015, ts.DiagnosticCategory.Message, "Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_or_ESNEXT_6015", "Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', or 'ESNEXT'."),
Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_or_ESNext: diag(6016, ts.DiagnosticCategory.Message, "Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_or_ESNext_6016", "Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'."),
Print_this_message: diag(6017, ts.DiagnosticCategory.Message, "Print_this_message_6017", "Print this message."),
Print_the_compiler_s_version: diag(6019, ts.DiagnosticCategory.Message, "Print_the_compiler_s_version_6019", "Print the compiler's version."),
Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json: diag(6020, ts.DiagnosticCategory.Message, "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020", "Compile the project given the path to its configuration file, or to a folder with a 'tsconfig.json'."),
Syntax_Colon_0: diag(6023, ts.DiagnosticCategory.Message, "Syntax_Colon_0_6023", "Syntax: {0}"),
options: diag(6024, ts.DiagnosticCategory.Message, "options_6024", "options"),
file: diag(6025, ts.DiagnosticCategory.Message, "file_6025", "file"),
Examples_Colon_0: diag(6026, ts.DiagnosticCategory.Message, "Examples_Colon_0_6026", "Examples: {0}"),
Options_Colon: diag(6027, ts.DiagnosticCategory.Message, "Options_Colon_6027", "Options:"),
Version_0: diag(6029, ts.DiagnosticCategory.Message, "Version_0_6029", "Version {0}"),
Insert_command_line_options_and_files_from_a_file: diag(6030, ts.DiagnosticCategory.Message, "Insert_command_line_options_and_files_from_a_file_6030", "Insert command line options and files from a file."),
File_change_detected_Starting_incremental_compilation: diag(6032, ts.DiagnosticCategory.Message, "File_change_detected_Starting_incremental_compilation_6032", "File change detected. Starting incremental compilation..."),
KIND: diag(6034, ts.DiagnosticCategory.Message, "KIND_6034", "KIND"),
FILE: diag(6035, ts.DiagnosticCategory.Message, "FILE_6035", "FILE"),
VERSION: diag(6036, ts.DiagnosticCategory.Message, "VERSION_6036", "VERSION"),
LOCATION: diag(6037, ts.DiagnosticCategory.Message, "LOCATION_6037", "LOCATION"),
DIRECTORY: diag(6038, ts.DiagnosticCategory.Message, "DIRECTORY_6038", "DIRECTORY"),
STRATEGY: diag(6039, ts.DiagnosticCategory.Message, "STRATEGY_6039", "STRATEGY"),
FILE_OR_DIRECTORY: diag(6040, ts.DiagnosticCategory.Message, "FILE_OR_DIRECTORY_6040", "FILE OR DIRECTORY"),
Compilation_complete_Watching_for_file_changes: diag(6042, ts.DiagnosticCategory.Message, "Compilation_complete_Watching_for_file_changes_6042", "Compilation complete. Watching for file changes."),
Generates_corresponding_map_file: diag(6043, ts.DiagnosticCategory.Message, "Generates_corresponding_map_file_6043", "Generates corresponding '.map' file."),
Compiler_option_0_expects_an_argument: diag(6044, ts.DiagnosticCategory.Error, "Compiler_option_0_expects_an_argument_6044", "Compiler option '{0}' expects an argument."),
Unterminated_quoted_string_in_response_file_0: diag(6045, ts.DiagnosticCategory.Error, "Unterminated_quoted_string_in_response_file_0_6045", "Unterminated quoted string in response file '{0}'."),
Argument_for_0_option_must_be_Colon_1: diag(6046, ts.DiagnosticCategory.Error, "Argument_for_0_option_must_be_Colon_1_6046", "Argument for '{0}' option must be: {1}."),
Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1: diag(6048, ts.DiagnosticCategory.Error, "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048", "Locale must be of the form <language> or <language>-<territory>. For example '{0}' or '{1}'."),
Unsupported_locale_0: diag(6049, ts.DiagnosticCategory.Error, "Unsupported_locale_0_6049", "Unsupported locale '{0}'."),
Unable_to_open_file_0: diag(6050, ts.DiagnosticCategory.Error, "Unable_to_open_file_0_6050", "Unable to open file '{0}'."),
Corrupted_locale_file_0: diag(6051, ts.DiagnosticCategory.Error, "Corrupted_locale_file_0_6051", "Corrupted locale file {0}."),
Raise_error_on_expressions_and_declarations_with_an_implied_any_type: diag(6052, ts.DiagnosticCategory.Message, "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052", "Raise error on expressions and declarations with an implied 'any' type."),
File_0_not_found: diag(6053, ts.DiagnosticCategory.Error, "File_0_not_found_6053", "File '{0}' not found."),
File_0_has_unsupported_extension_The_only_supported_extensions_are_1: diag(6054, ts.DiagnosticCategory.Error, "File_0_has_unsupported_extension_The_only_supported_extensions_are_1_6054", "File '{0}' has unsupported extension. The only supported extensions are {1}."),
Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures: diag(6055, ts.DiagnosticCategory.Message, "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055", "Suppress noImplicitAny errors for indexing objects lacking index signatures."),
Do_not_emit_declarations_for_code_that_has_an_internal_annotation: diag(6056, ts.DiagnosticCategory.Message, "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056", "Do not emit declarations for code that has an '@internal' annotation."),
Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir: diag(6058, ts.DiagnosticCategory.Message, "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058", "Specify the root directory of input files. Use to control the output directory structure with --outDir."),
File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files: diag(6059, ts.DiagnosticCategory.Error, "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059", "File '{0}' is not under 'rootDir' '{1}'. 'rootDir' is expected to contain all source files."),
Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix: diag(6060, ts.DiagnosticCategory.Message, "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060", "Specify the end of line sequence to be used when emitting files: 'CRLF' (dos) or 'LF' (unix)."),
NEWLINE: diag(6061, ts.DiagnosticCategory.Message, "NEWLINE_6061", "NEWLINE"),
Option_0_can_only_be_specified_in_tsconfig_json_file: diag(6064, ts.DiagnosticCategory.Error, "Option_0_can_only_be_specified_in_tsconfig_json_file_6064", "Option '{0}' can only be specified in 'tsconfig.json' file."),
Enables_experimental_support_for_ES7_decorators: diag(6065, ts.DiagnosticCategory.Message, "Enables_experimental_support_for_ES7_decorators_6065", "Enables experimental support for ES7 decorators."),
Enables_experimental_support_for_emitting_type_metadata_for_decorators: diag(6066, ts.DiagnosticCategory.Message, "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066", "Enables experimental support for emitting type metadata for decorators."),
Enables_experimental_support_for_ES7_async_functions: diag(6068, ts.DiagnosticCategory.Message, "Enables_experimental_support_for_ES7_async_functions_6068", "Enables experimental support for ES7 async functions."),
Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6: diag(6069, ts.DiagnosticCategory.Message, "Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6_6069", "Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6)."),
Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file: diag(6070, ts.DiagnosticCategory.Message, "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070", "Initializes a TypeScript project and creates a tsconfig.json file."),
Successfully_created_a_tsconfig_json_file: diag(6071, ts.DiagnosticCategory.Message, "Successfully_created_a_tsconfig_json_file_6071", "Successfully created a tsconfig.json file."),
Suppress_excess_property_checks_for_object_literals: diag(6072, ts.DiagnosticCategory.Message, "Suppress_excess_property_checks_for_object_literals_6072", "Suppress excess property checks for object literals."),
Stylize_errors_and_messages_using_color_and_context_experimental: diag(6073, ts.DiagnosticCategory.Message, "Stylize_errors_and_messages_using_color_and_context_experimental_6073", "Stylize errors and messages using color and context (experimental)."),
Do_not_report_errors_on_unused_labels: diag(6074, ts.DiagnosticCategory.Message, "Do_not_report_errors_on_unused_labels_6074", "Do not report errors on unused labels."),
Report_error_when_not_all_code_paths_in_function_return_a_value: diag(6075, ts.DiagnosticCategory.Message, "Report_error_when_not_all_code_paths_in_function_return_a_value_6075", "Report error when not all code paths in function return a value."),
Report_errors_for_fallthrough_cases_in_switch_statement: diag(6076, ts.DiagnosticCategory.Message, "Report_errors_for_fallthrough_cases_in_switch_statement_6076", "Report errors for fallthrough cases in switch statement."),
Do_not_report_errors_on_unreachable_code: diag(6077, ts.DiagnosticCategory.Message, "Do_not_report_errors_on_unreachable_code_6077", "Do not report errors on unreachable code."),
Disallow_inconsistently_cased_references_to_the_same_file: diag(6078, ts.DiagnosticCategory.Message, "Disallow_inconsistently_cased_references_to_the_same_file_6078", "Disallow inconsistently-cased references to the same file."),
Specify_library_files_to_be_included_in_the_compilation_Colon: diag(6079, ts.DiagnosticCategory.Message, "Specify_library_files_to_be_included_in_the_compilation_Colon_6079", "Specify library files to be included in the compilation: "),
Specify_JSX_code_generation_Colon_preserve_react_native_or_react: diag(6080, ts.DiagnosticCategory.Message, "Specify_JSX_code_generation_Colon_preserve_react_native_or_react_6080", "Specify JSX code generation: 'preserve', 'react-native', or 'react'."),
File_0_has_an_unsupported_extension_so_skipping_it: diag(6081, ts.DiagnosticCategory.Message, "File_0_has_an_unsupported_extension_so_skipping_it_6081", "File '{0}' has an unsupported extension, so skipping it."),
Only_amd_and_system_modules_are_supported_alongside_0: diag(6082, ts.DiagnosticCategory.Error, "Only_amd_and_system_modules_are_supported_alongside_0_6082", "Only 'amd' and 'system' modules are supported alongside --{0}."),
Base_directory_to_resolve_non_absolute_module_names: diag(6083, ts.DiagnosticCategory.Message, "Base_directory_to_resolve_non_absolute_module_names_6083", "Base directory to resolve non-absolute module names."),
Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react_JSX_emit: diag(6084, ts.DiagnosticCategory.Message, "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084", "[Deprecated] Use '--jsxFactory' instead. Specify the object invoked for createElement when targeting 'react' JSX emit"),
Enable_tracing_of_the_name_resolution_process: diag(6085, ts.DiagnosticCategory.Message, "Enable_tracing_of_the_name_resolution_process_6085", "Enable tracing of the name resolution process."),
Resolving_module_0_from_1: diag(6086, ts.DiagnosticCategory.Message, "Resolving_module_0_from_1_6086", "======== Resolving module '{0}' from '{1}'. ========"),
Explicitly_specified_module_resolution_kind_Colon_0: diag(6087, ts.DiagnosticCategory.Message, "Explicitly_specified_module_resolution_kind_Colon_0_6087", "Explicitly specified module resolution kind: '{0}'."),
Module_resolution_kind_is_not_specified_using_0: diag(6088, ts.DiagnosticCategory.Message, "Module_resolution_kind_is_not_specified_using_0_6088", "Module resolution kind is not specified, using '{0}'."),
Module_name_0_was_successfully_resolved_to_1: diag(6089, ts.DiagnosticCategory.Message, "Module_name_0_was_successfully_resolved_to_1_6089", "======== Module name '{0}' was successfully resolved to '{1}'. ========"),
Module_name_0_was_not_resolved: diag(6090, ts.DiagnosticCategory.Message, "Module_name_0_was_not_resolved_6090", "======== Module name '{0}' was not resolved. ========"),
paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0: diag(6091, ts.DiagnosticCategory.Message, "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091", "'paths' option is specified, looking for a pattern to match module name '{0}'."),
Module_name_0_matched_pattern_1: diag(6092, ts.DiagnosticCategory.Message, "Module_name_0_matched_pattern_1_6092", "Module name '{0}', matched pattern '{1}'."),
Trying_substitution_0_candidate_module_location_Colon_1: diag(6093, ts.DiagnosticCategory.Message, "Trying_substitution_0_candidate_module_location_Colon_1_6093", "Trying substitution '{0}', candidate module location: '{1}'."),
Resolving_module_name_0_relative_to_base_url_1_2: diag(6094, ts.DiagnosticCategory.Message, "Resolving_module_name_0_relative_to_base_url_1_2_6094", "Resolving module name '{0}' relative to base url '{1}' - '{2}'."),
Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1: diag(6095, ts.DiagnosticCategory.Message, "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1_6095", "Loading module as file / folder, candidate module location '{0}', target file type '{1}'."),
File_0_does_not_exist: diag(6096, ts.DiagnosticCategory.Message, "File_0_does_not_exist_6096", "File '{0}' does not exist."),
File_0_exist_use_it_as_a_name_resolution_result: diag(6097, ts.DiagnosticCategory.Message, "File_0_exist_use_it_as_a_name_resolution_result_6097", "File '{0}' exist - use it as a name resolution result."),
Loading_module_0_from_node_modules_folder_target_file_type_1: diag(6098, ts.DiagnosticCategory.Message, "Loading_module_0_from_node_modules_folder_target_file_type_1_6098", "Loading module '{0}' from 'node_modules' folder, target file type '{1}'."),
Found_package_json_at_0: diag(6099, ts.DiagnosticCategory.Message, "Found_package_json_at_0_6099", "Found 'package.json' at '{0}'."),
package_json_does_not_have_a_0_field: diag(6100, ts.DiagnosticCategory.Message, "package_json_does_not_have_a_0_field_6100", "'package.json' does not have a '{0}' field."),
package_json_has_0_field_1_that_references_2: diag(6101, ts.DiagnosticCategory.Message, "package_json_has_0_field_1_that_references_2_6101", "'package.json' has '{0}' field '{1}' that references '{2}'."),
Allow_javascript_files_to_be_compiled: diag(6102, ts.DiagnosticCategory.Message, "Allow_javascript_files_to_be_compiled_6102", "Allow javascript files to be compiled."),
Option_0_should_have_array_of_strings_as_a_value: diag(6103, ts.DiagnosticCategory.Error, "Option_0_should_have_array_of_strings_as_a_value_6103", "Option '{0}' should have array of strings as a value."),
Checking_if_0_is_the_longest_matching_prefix_for_1_2: diag(6104, ts.DiagnosticCategory.Message, "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104", "Checking if '{0}' is the longest matching prefix for '{1}' - '{2}'."),
Expected_type_of_0_field_in_package_json_to_be_string_got_1: diag(6105, ts.DiagnosticCategory.Message, "Expected_type_of_0_field_in_package_json_to_be_string_got_1_6105", "Expected type of '{0}' field in 'package.json' to be 'string', got '{1}'."),
baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1: diag(6106, ts.DiagnosticCategory.Message, "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106", "'baseUrl' option is set to '{0}', using this value to resolve non-relative module name '{1}'."),
rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0: diag(6107, ts.DiagnosticCategory.Message, "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107", "'rootDirs' option is set, using it to resolve relative module name '{0}'."),
Longest_matching_prefix_for_0_is_1: diag(6108, ts.DiagnosticCategory.Message, "Longest_matching_prefix_for_0_is_1_6108", "Longest matching prefix for '{0}' is '{1}'."),
Loading_0_from_the_root_dir_1_candidate_location_2: diag(6109, ts.DiagnosticCategory.Message, "Loading_0_from_the_root_dir_1_candidate_location_2_6109", "Loading '{0}' from the root dir '{1}', candidate location '{2}'."),
Trying_other_entries_in_rootDirs: diag(6110, ts.DiagnosticCategory.Message, "Trying_other_entries_in_rootDirs_6110", "Trying other entries in 'rootDirs'."),
Module_resolution_using_rootDirs_has_failed: diag(6111, ts.DiagnosticCategory.Message, "Module_resolution_using_rootDirs_has_failed_6111", "Module resolution using 'rootDirs' has failed."),
Do_not_emit_use_strict_directives_in_module_output: diag(6112, ts.DiagnosticCategory.Message, "Do_not_emit_use_strict_directives_in_module_output_6112", "Do not emit 'use strict' directives in module output."),
Enable_strict_null_checks: diag(6113, ts.DiagnosticCategory.Message, "Enable_strict_null_checks_6113", "Enable strict null checks."),
Unknown_option_excludes_Did_you_mean_exclude: diag(6114, ts.DiagnosticCategory.Error, "Unknown_option_excludes_Did_you_mean_exclude_6114", "Unknown option 'excludes'. Did you mean 'exclude'?"),
Raise_error_on_this_expressions_with_an_implied_any_type: diag(6115, ts.DiagnosticCategory.Message, "Raise_error_on_this_expressions_with_an_implied_any_type_6115", "Raise error on 'this' expressions with an implied 'any' type."),
Resolving_type_reference_directive_0_containing_file_1_root_directory_2: diag(6116, ts.DiagnosticCategory.Message, "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116", "======== Resolving type reference directive '{0}', containing file '{1}', root directory '{2}'. ========"),
Resolving_using_primary_search_paths: diag(6117, ts.DiagnosticCategory.Message, "Resolving_using_primary_search_paths_6117", "Resolving using primary search paths..."),
Resolving_from_node_modules_folder: diag(6118, ts.DiagnosticCategory.Message, "Resolving_from_node_modules_folder_6118", "Resolving from node_modules folder..."),
Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2: diag(6119, ts.DiagnosticCategory.Message, "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119", "======== Type reference directive '{0}' was successfully resolved to '{1}', primary: {2}. ========"),
Type_reference_directive_0_was_not_resolved: diag(6120, ts.DiagnosticCategory.Message, "Type_reference_directive_0_was_not_resolved_6120", "======== Type reference directive '{0}' was not resolved. ========"),
Resolving_with_primary_search_path_0: diag(6121, ts.DiagnosticCategory.Message, "Resolving_with_primary_search_path_0_6121", "Resolving with primary search path '{0}'."),
Root_directory_cannot_be_determined_skipping_primary_search_paths: diag(6122, ts.DiagnosticCategory.Message, "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122", "Root directory cannot be determined, skipping primary search paths."),
Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set: diag(6123, ts.DiagnosticCategory.Message, "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123", "======== Resolving type reference directive '{0}', containing file '{1}', root directory not set. ========"),
Type_declaration_files_to_be_included_in_compilation: diag(6124, ts.DiagnosticCategory.Message, "Type_declaration_files_to_be_included_in_compilation_6124", "Type declaration files to be included in compilation."),
Looking_up_in_node_modules_folder_initial_location_0: diag(6125, ts.DiagnosticCategory.Message, "Looking_up_in_node_modules_folder_initial_location_0_6125", "Looking up in 'node_modules' folder, initial location '{0}'."),
Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_modules_folder: diag(6126, ts.DiagnosticCategory.Message, "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126", "Containing file is not specified and root directory cannot be determined, skipping lookup in 'node_modules' folder."),
Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1: diag(6127, ts.DiagnosticCategory.Message, "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127", "======== Resolving type reference directive '{0}', containing file not set, root directory '{1}'. ========"),
Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set: diag(6128, ts.DiagnosticCategory.Message, "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128", "======== Resolving type reference directive '{0}', containing file not set, root directory not set. ========"),
Resolving_real_path_for_0_result_1: diag(6130, ts.DiagnosticCategory.Message, "Resolving_real_path_for_0_result_1_6130", "Resolving real path for '{0}', result '{1}'."),
Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system: diag(6131, ts.DiagnosticCategory.Error, "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131", "Cannot compile modules using option '{0}' unless the '--module' flag is 'amd' or 'system'."),
File_name_0_has_a_1_extension_stripping_it: diag(6132, ts.DiagnosticCategory.Message, "File_name_0_has_a_1_extension_stripping_it_6132", "File name '{0}' has a '{1}' extension - stripping it."),
_0_is_declared_but_its_value_is_never_read: diag(6133, ts.DiagnosticCategory.Error, "_0_is_declared_but_its_value_is_never_read_6133", "'{0}' is declared but its value is never read."),
Report_errors_on_unused_locals: diag(6134, ts.DiagnosticCategory.Message, "Report_errors_on_unused_locals_6134", "Report errors on unused locals."),
Report_errors_on_unused_parameters: diag(6135, ts.DiagnosticCategory.Message, "Report_errors_on_unused_parameters_6135", "Report errors on unused parameters."),
The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files: diag(6136, ts.DiagnosticCategory.Message, "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136", "The maximum dependency depth to search under node_modules and load JavaScript files."),
Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1: diag(6137, ts.DiagnosticCategory.Error, "Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137", "Cannot import type declaration files. Consider importing '{0}' instead of '{1}'."),
Property_0_is_declared_but_its_value_is_never_read: diag(6138, ts.DiagnosticCategory.Error, "Property_0_is_declared_but_its_value_is_never_read_6138", "Property '{0}' is declared but its value is never read."),
Import_emit_helpers_from_tslib: diag(6139, ts.DiagnosticCategory.Message, "Import_emit_helpers_from_tslib_6139", "Import emit helpers from 'tslib'."),
Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using_cache_location_2: diag(6140, ts.DiagnosticCategory.Error, "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140", "Auto discovery for typings is enabled in project '{0}'. Running extra resolution pass for module '{1}' using cache location '{2}'."),
Parse_in_strict_mode_and_emit_use_strict_for_each_source_file: diag(6141, ts.DiagnosticCategory.Message, "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141", "Parse in strict mode and emit \"use strict\" for each source file."),
Module_0_was_resolved_to_1_but_jsx_is_not_set: diag(6142, ts.DiagnosticCategory.Error, "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142", "Module '{0}' was resolved to '{1}', but '--jsx' is not set."),
Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1: diag(6144, ts.DiagnosticCategory.Message, "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144", "Module '{0}' was resolved as locally declared ambient module in file '{1}'."),
Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified: diag(6145, ts.DiagnosticCategory.Message, "Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified_6145", "Module '{0}' was resolved as ambient module declared in '{1}' since this file was not modified."),
Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h: diag(6146, ts.DiagnosticCategory.Message, "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146", "Specify the JSX factory function to use when targeting 'react' JSX emit, e.g. 'React.createElement' or 'h'."),
Resolution_for_module_0_was_found_in_cache: diag(6147, ts.DiagnosticCategory.Message, "Resolution_for_module_0_was_found_in_cache_6147", "Resolution for module '{0}' was found in cache."),
Directory_0_does_not_exist_skipping_all_lookups_in_it: diag(6148, ts.DiagnosticCategory.Message, "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148", "Directory '{0}' does not exist, skipping all lookups in it."),
Show_diagnostic_information: diag(6149, ts.DiagnosticCategory.Message, "Show_diagnostic_information_6149", "Show diagnostic information."),
Show_verbose_diagnostic_information: diag(6150, ts.DiagnosticCategory.Message, "Show_verbose_diagnostic_information_6150", "Show verbose diagnostic information."),
Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file: diag(6151, ts.DiagnosticCategory.Message, "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151", "Emit a single file with source maps instead of having a separate file."),
Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap_to_be_set: diag(6152, ts.DiagnosticCategory.Message, "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152", "Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set."),
Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule: diag(6153, ts.DiagnosticCategory.Message, "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153", "Transpile each file as a separate module (similar to 'ts.transpileModule')."),
Print_names_of_generated_files_part_of_the_compilation: diag(6154, ts.DiagnosticCategory.Message, "Print_names_of_generated_files_part_of_the_compilation_6154", "Print names of generated files part of the compilation."),
Print_names_of_files_part_of_the_compilation: diag(6155, ts.DiagnosticCategory.Message, "Print_names_of_files_part_of_the_compilation_6155", "Print names of files part of the compilation."),
The_locale_used_when_displaying_messages_to_the_user_e_g_en_us: diag(6156, ts.DiagnosticCategory.Message, "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156", "The locale used when displaying messages to the user (e.g. 'en-us')"),
Do_not_generate_custom_helper_functions_like_extends_in_compiled_output: diag(6157, ts.DiagnosticCategory.Message, "Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157", "Do not generate custom helper functions like '__extends' in compiled output."),
Do_not_include_the_default_library_file_lib_d_ts: diag(6158, ts.DiagnosticCategory.Message, "Do_not_include_the_default_library_file_lib_d_ts_6158", "Do not include the default library file (lib.d.ts)."),
Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files: diag(6159, ts.DiagnosticCategory.Message, "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159", "Do not add triple-slash references or imported modules to the list of compiled files."),
Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files: diag(6160, ts.DiagnosticCategory.Message, "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160", "[Deprecated] Use '--skipLibCheck' instead. Skip type checking of default library declaration files."),
List_of_folders_to_include_type_definitions_from: diag(6161, ts.DiagnosticCategory.Message, "List_of_folders_to_include_type_definitions_from_6161", "List of folders to include type definitions from."),
Disable_size_limitations_on_JavaScript_projects: diag(6162, ts.DiagnosticCategory.Message, "Disable_size_limitations_on_JavaScript_projects_6162", "Disable size limitations on JavaScript projects."),
The_character_set_of_the_input_files: diag(6163, ts.DiagnosticCategory.Message, "The_character_set_of_the_input_files_6163", "The character set of the input files."),
Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files: diag(6164, ts.DiagnosticCategory.Message, "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6164", "Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files."),
Do_not_truncate_error_messages: diag(6165, ts.DiagnosticCategory.Message, "Do_not_truncate_error_messages_6165", "Do not truncate error messages."),
Output_directory_for_generated_declaration_files: diag(6166, ts.DiagnosticCategory.Message, "Output_directory_for_generated_declaration_files_6166", "Output directory for generated declaration files."),
A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl: diag(6167, ts.DiagnosticCategory.Message, "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167", "A series of entries which re-map imports to lookup locations relative to the 'baseUrl'."),
List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime: diag(6168, ts.DiagnosticCategory.Message, "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168", "List of root folders whose combined content represents the structure of the project at runtime."),
Show_all_compiler_options: diag(6169, ts.DiagnosticCategory.Message, "Show_all_compiler_options_6169", "Show all compiler options."),
Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file: diag(6170, ts.DiagnosticCategory.Message, "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170", "[Deprecated] Use '--outFile' instead. Concatenate and emit output to single file"),
Command_line_Options: diag(6171, ts.DiagnosticCategory.Message, "Command_line_Options_6171", "Command-line Options"),
Basic_Options: diag(6172, ts.DiagnosticCategory.Message, "Basic_Options_6172", "Basic Options"),
Strict_Type_Checking_Options: diag(6173, ts.DiagnosticCategory.Message, "Strict_Type_Checking_Options_6173", "Strict Type-Checking Options"),
Module_Resolution_Options: diag(6174, ts.DiagnosticCategory.Message, "Module_Resolution_Options_6174", "Module Resolution Options"),
Source_Map_Options: diag(6175, ts.DiagnosticCategory.Message, "Source_Map_Options_6175", "Source Map Options"),
Additional_Checks: diag(6176, ts.DiagnosticCategory.Message, "Additional_Checks_6176", "Additional Checks"),
Experimental_Options: diag(6177, ts.DiagnosticCategory.Message, "Experimental_Options_6177", "Experimental Options"),
Advanced_Options: diag(6178, ts.DiagnosticCategory.Message, "Advanced_Options_6178", "Advanced Options"),
Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3: diag(6179, ts.DiagnosticCategory.Message, "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3_6179", "Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'."),
Enable_all_strict_type_checking_options: diag(6180, ts.DiagnosticCategory.Message, "Enable_all_strict_type_checking_options_6180", "Enable all strict type-checking options."),
List_of_language_service_plugins: diag(6181, ts.DiagnosticCategory.Message, "List_of_language_service_plugins_6181", "List of language service plugins."),
Scoped_package_detected_looking_in_0: diag(6182, ts.DiagnosticCategory.Message, "Scoped_package_detected_looking_in_0_6182", "Scoped package detected, looking in '{0}'"),
Reusing_resolution_of_module_0_to_file_1_from_old_program: diag(6183, ts.DiagnosticCategory.Message, "Reusing_resolution_of_module_0_to_file_1_from_old_program_6183", "Reusing resolution of module '{0}' to file '{1}' from old program."),
Reusing_module_resolutions_originating_in_0_since_resolutions_are_unchanged_from_old_program: diag(6184, ts.DiagnosticCategory.Message, "Reusing_module_resolutions_originating_in_0_since_resolutions_are_unchanged_from_old_program_6184", "Reusing module resolutions originating in '{0}' since resolutions are unchanged from old program."),
Disable_strict_checking_of_generic_signatures_in_function_types: diag(6185, ts.DiagnosticCategory.Message, "Disable_strict_checking_of_generic_signatures_in_function_types_6185", "Disable strict checking of generic signatures in function types."),
Enable_strict_checking_of_function_types: diag(6186, ts.DiagnosticCategory.Message, "Enable_strict_checking_of_function_types_6186", "Enable strict checking of function types."),
Variable_0_implicitly_has_an_1_type: diag(7005, ts.DiagnosticCategory.Error, "Variable_0_implicitly_has_an_1_type_7005", "Variable '{0}' implicitly has an '{1}' type."),
Parameter_0_implicitly_has_an_1_type: diag(7006, ts.DiagnosticCategory.Error, "Parameter_0_implicitly_has_an_1_type_7006", "Parameter '{0}' implicitly has an '{1}' type."),
Member_0_implicitly_has_an_1_type: diag(7008, ts.DiagnosticCategory.Error, "Member_0_implicitly_has_an_1_type_7008", "Member '{0}' implicitly has an '{1}' type."),
new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type: diag(7009, ts.DiagnosticCategory.Error, "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009", "'new' expression, whose target lacks a construct signature, implicitly has an 'any' type."),
_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type: diag(7010, ts.DiagnosticCategory.Error, "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010", "'{0}', which lacks return-type annotation, implicitly has an '{1}' return type."),
Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type: diag(7011, ts.DiagnosticCategory.Error, "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011", "Function expression, which lacks return-type annotation, implicitly has an '{0}' return type."),
Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: diag(7013, ts.DiagnosticCategory.Error, "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013", "Construct signature, which lacks return-type annotation, implicitly has an 'any' return type."),
Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number: diag(7015, ts.DiagnosticCategory.Error, "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015", "Element implicitly has an 'any' type because index expression is not of type 'number'."),
Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type: diag(7016, ts.DiagnosticCategory.Error, "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016", "Could not find a declaration file for module '{0}'. '{1}' implicitly has an 'any' type."),
Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature: diag(7017, ts.DiagnosticCategory.Error, "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017", "Element implicitly has an 'any' type because type '{0}' has no index signature."),
Object_literal_s_property_0_implicitly_has_an_1_type: diag(7018, ts.DiagnosticCategory.Error, "Object_literal_s_property_0_implicitly_has_an_1_type_7018", "Object literal's property '{0}' implicitly has an '{1}' type."),
Rest_parameter_0_implicitly_has_an_any_type: diag(7019, ts.DiagnosticCategory.Error, "Rest_parameter_0_implicitly_has_an_any_type_7019", "Rest parameter '{0}' implicitly has an 'any[]' type."),
Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: diag(7020, ts.DiagnosticCategory.Error, "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020", "Call signature, which lacks return-type annotation, implicitly has an 'any' return type."),
_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or_indirectly_in_its_own_initializer: diag(7022, ts.DiagnosticCategory.Error, "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022", "'{0}' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer."),
_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions: diag(7023, ts.DiagnosticCategory.Error, "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023", "'{0}' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions."),
Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions: diag(7024, ts.DiagnosticCategory.Error, "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024", "Function implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions."),
Generator_implicitly_has_type_0_because_it_does_not_yield_any_values_Consider_supplying_a_return_type: diag(7025, ts.DiagnosticCategory.Error, "Generator_implicitly_has_type_0_because_it_does_not_yield_any_values_Consider_supplying_a_return_typ_7025", "Generator implicitly has type '{0}' because it does not yield any values. Consider supplying a return type."),
JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists: diag(7026, ts.DiagnosticCategory.Error, "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026", "JSX element implicitly has type 'any' because no interface 'JSX.{0}' exists."),
Unreachable_code_detected: diag(7027, ts.DiagnosticCategory.Error, "Unreachable_code_detected_7027", "Unreachable code detected."),
Unused_label: diag(7028, ts.DiagnosticCategory.Error, "Unused_label_7028", "Unused label."),
Fallthrough_case_in_switch: diag(7029, ts.DiagnosticCategory.Error, "Fallthrough_case_in_switch_7029", "Fallthrough case in switch."),
Not_all_code_paths_return_a_value: diag(7030, ts.DiagnosticCategory.Error, "Not_all_code_paths_return_a_value_7030", "Not all code paths return a value."),
Binding_element_0_implicitly_has_an_1_type: diag(7031, ts.DiagnosticCategory.Error, "Binding_element_0_implicitly_has_an_1_type_7031", "Binding element '{0}' implicitly has an '{1}' type."),
Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation: diag(7032, ts.DiagnosticCategory.Error, "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032", "Property '{0}' implicitly has type 'any', because its set accessor lacks a parameter type annotation."),
Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation: diag(7033, ts.DiagnosticCategory.Error, "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033", "Property '{0}' implicitly has type 'any', because its get accessor lacks a return type annotation."),
Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined: diag(7034, ts.DiagnosticCategory.Error, "Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034", "Variable '{0}' implicitly has type '{1}' in some locations where its type cannot be determined."),
Try_npm_install_types_Slash_0_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare_module_0: diag(7035, ts.DiagnosticCategory.Error, "Try_npm_install_types_Slash_0_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare_mod_7035", "Try `npm install @types/{0}` if it exists or add a new declaration (.d.ts) file containing `declare module '{0}';`"),
Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0: diag(7036, ts.DiagnosticCategory.Error, "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036", "Dynamic import's specifier must be of type 'string', but here has type '{0}'."),
You_cannot_rename_this_element: diag(8000, ts.DiagnosticCategory.Error, "You_cannot_rename_this_element_8000", "You cannot rename this element."),
You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library: diag(8001, ts.DiagnosticCategory.Error, "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001", "You cannot rename elements that are defined in the standard TypeScript library."),
import_can_only_be_used_in_a_ts_file: diag(8002, ts.DiagnosticCategory.Error, "import_can_only_be_used_in_a_ts_file_8002", "'import ... =' can only be used in a .ts file."),
export_can_only_be_used_in_a_ts_file: diag(8003, ts.DiagnosticCategory.Error, "export_can_only_be_used_in_a_ts_file_8003", "'export=' can only be used in a .ts file."),
type_parameter_declarations_can_only_be_used_in_a_ts_file: diag(8004, ts.DiagnosticCategory.Error, "type_parameter_declarations_can_only_be_used_in_a_ts_file_8004", "'type parameter declarations' can only be used in a .ts file."),
implements_clauses_can_only_be_used_in_a_ts_file: diag(8005, ts.DiagnosticCategory.Error, "implements_clauses_can_only_be_used_in_a_ts_file_8005", "'implements clauses' can only be used in a .ts file."),
interface_declarations_can_only_be_used_in_a_ts_file: diag(8006, ts.DiagnosticCategory.Error, "interface_declarations_can_only_be_used_in_a_ts_file_8006", "'interface declarations' can only be used in a .ts file."),
module_declarations_can_only_be_used_in_a_ts_file: diag(8007, ts.DiagnosticCategory.Error, "module_declarations_can_only_be_used_in_a_ts_file_8007", "'module declarations' can only be used in a .ts file."),
type_aliases_can_only_be_used_in_a_ts_file: diag(8008, ts.DiagnosticCategory.Error, "type_aliases_can_only_be_used_in_a_ts_file_8008", "'type aliases' can only be used in a .ts file."),
_0_can_only_be_used_in_a_ts_file: diag(8009, ts.DiagnosticCategory.Error, "_0_can_only_be_used_in_a_ts_file_8009", "'{0}' can only be used in a .ts file."),
types_can_only_be_used_in_a_ts_file: diag(8010, ts.DiagnosticCategory.Error, "types_can_only_be_used_in_a_ts_file_8010", "'types' can only be used in a .ts file."),
type_arguments_can_only_be_used_in_a_ts_file: diag(8011, ts.DiagnosticCategory.Error, "type_arguments_can_only_be_used_in_a_ts_file_8011", "'type arguments' can only be used in a .ts file."),
parameter_modifiers_can_only_be_used_in_a_ts_file: diag(8012, ts.DiagnosticCategory.Error, "parameter_modifiers_can_only_be_used_in_a_ts_file_8012", "'parameter modifiers' can only be used in a .ts file."),
non_null_assertions_can_only_be_used_in_a_ts_file: diag(8013, ts.DiagnosticCategory.Error, "non_null_assertions_can_only_be_used_in_a_ts_file_8013", "'non-null assertions' can only be used in a .ts file."),
enum_declarations_can_only_be_used_in_a_ts_file: diag(8015, ts.DiagnosticCategory.Error, "enum_declarations_can_only_be_used_in_a_ts_file_8015", "'enum declarations' can only be used in a .ts file."),
type_assertion_expressions_can_only_be_used_in_a_ts_file: diag(8016, ts.DiagnosticCategory.Error, "type_assertion_expressions_can_only_be_used_in_a_ts_file_8016", "'type assertion expressions' can only be used in a .ts file."),
Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0: diag(8017, ts.DiagnosticCategory.Error, "Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0_8017", "Octal literal types must use ES2015 syntax. Use the syntax '{0}'."),
Octal_literals_are_not_allowed_in_enums_members_initializer_Use_the_syntax_0: diag(8018, ts.DiagnosticCategory.Error, "Octal_literals_are_not_allowed_in_enums_members_initializer_Use_the_syntax_0_8018", "Octal literals are not allowed in enums members initializer. Use the syntax '{0}'."),
Report_errors_in_js_files: diag(8019, ts.DiagnosticCategory.Message, "Report_errors_in_js_files_8019", "Report errors in .js files."),
JSDoc_types_can_only_be_used_inside_documentation_comments: diag(8020, ts.DiagnosticCategory.Error, "JSDoc_types_can_only_be_used_inside_documentation_comments_8020", "JSDoc types can only be used inside documentation comments."),
JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags: diag(8021, ts.DiagnosticCategory.Error, "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021", "JSDoc '@typedef' tag should either have a type annotation or be followed by '@property' or '@member' tags."),
JSDoc_0_is_not_attached_to_a_class: diag(8022, ts.DiagnosticCategory.Error, "JSDoc_0_is_not_attached_to_a_class_8022", "JSDoc '@{0}' is not attached to a class."),
JSDoc_0_1_does_not_match_the_extends_2_clause: diag(8023, ts.DiagnosticCategory.Error, "JSDoc_0_1_does_not_match_the_extends_2_clause_8023", "JSDoc '@{0} {1}' does not match the 'extends {2}' clause."),
JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name: diag(8024, ts.DiagnosticCategory.Error, "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024", "JSDoc '@param' tag has name '{0}', but there is no parameter with that name."),
Class_declarations_cannot_have_more_than_one_augments_or_extends_tag: diag(8025, ts.DiagnosticCategory.Error, "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025", "Class declarations cannot have more than one `@augments` or `@extends` tag."),
Only_identifiers_Slashqualified_names_with_optional_type_arguments_are_currently_supported_in_a_class_extends_clause: diag(9002, ts.DiagnosticCategory.Error, "Only_identifiers_Slashqualified_names_with_optional_type_arguments_are_currently_supported_in_a_clas_9002", "Only identifiers/qualified-names with optional type arguments are currently supported in a class 'extends' clause."),
class_expressions_are_not_currently_supported: diag(9003, ts.DiagnosticCategory.Error, "class_expressions_are_not_currently_supported_9003", "'class' expressions are not currently supported."),
Language_service_is_disabled: diag(9004, ts.DiagnosticCategory.Error, "Language_service_is_disabled_9004", "Language service is disabled."),
JSX_attributes_must_only_be_assigned_a_non_empty_expression: diag(17000, ts.DiagnosticCategory.Error, "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000", "JSX attributes must only be assigned a non-empty 'expression'."),
JSX_elements_cannot_have_multiple_attributes_with_the_same_name: diag(17001, ts.DiagnosticCategory.Error, "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001", "JSX elements cannot have multiple attributes with the same name."),
Expected_corresponding_JSX_closing_tag_for_0: diag(17002, ts.DiagnosticCategory.Error, "Expected_corresponding_JSX_closing_tag_for_0_17002", "Expected corresponding JSX closing tag for '{0}'."),
JSX_attribute_expected: diag(17003, ts.DiagnosticCategory.Error, "JSX_attribute_expected_17003", "JSX attribute expected."),
Cannot_use_JSX_unless_the_jsx_flag_is_provided: diag(17004, ts.DiagnosticCategory.Error, "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004", "Cannot use JSX unless the '--jsx' flag is provided."),
A_constructor_cannot_contain_a_super_call_when_its_class_extends_null: diag(17005, ts.DiagnosticCategory.Error, "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005", "A constructor cannot contain a 'super' call when its class extends 'null'."),
An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses: diag(17006, ts.DiagnosticCategory.Error, "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006", "An unary expression with the '{0}' operator is not allowed in the left-hand side of an exponentiation expression. Consider enclosing the expression in parentheses."),
A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses: diag(17007, ts.DiagnosticCategory.Error, "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007", "A type assertion expression is not allowed in the left-hand side of an exponentiation expression. Consider enclosing the expression in parentheses."),
JSX_element_0_has_no_corresponding_closing_tag: diag(17008, ts.DiagnosticCategory.Error, "JSX_element_0_has_no_corresponding_closing_tag_17008", "JSX element '{0}' has no corresponding closing tag."),
super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class: diag(17009, ts.DiagnosticCategory.Error, "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009", "'super' must be called before accessing 'this' in the constructor of a derived class."),
Unknown_type_acquisition_option_0: diag(17010, ts.DiagnosticCategory.Error, "Unknown_type_acquisition_option_0_17010", "Unknown type acquisition option '{0}'."),
super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class: diag(17011, ts.DiagnosticCategory.Error, "super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011", "'super' must be called before accessing a property of 'super' in the constructor of a derived class."),
_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2: diag(17012, ts.DiagnosticCategory.Error, "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012", "'{0}' is not a valid meta-property for keyword '{1}'. Did you mean '{2}'?"),
Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constructor: diag(17013, ts.DiagnosticCategory.Error, "Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013", "Meta-property '{0}' is only allowed in the body of a function declaration, function expression, or constructor."),
Circularity_detected_while_resolving_configuration_Colon_0: diag(18000, ts.DiagnosticCategory.Error, "Circularity_detected_while_resolving_configuration_Colon_0_18000", "Circularity detected while resolving configuration: {0}"),
A_path_in_an_extends_option_must_be_relative_or_rooted_but_0_is_not: diag(18001, ts.DiagnosticCategory.Error, "A_path_in_an_extends_option_must_be_relative_or_rooted_but_0_is_not_18001", "A path in an 'extends' option must be relative or rooted, but '{0}' is not."),
The_files_list_in_config_file_0_is_empty: diag(18002, ts.DiagnosticCategory.Error, "The_files_list_in_config_file_0_is_empty_18002", "The 'files' list in config file '{0}' is empty."),
No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2: diag(18003, ts.DiagnosticCategory.Error, "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003", "No inputs were found in config file '{0}'. Specified 'include' paths were '{1}' and 'exclude' paths were '{2}'."),
Add_missing_super_call: diag(90001, ts.DiagnosticCategory.Message, "Add_missing_super_call_90001", "Add missing 'super()' call."),
Make_super_call_the_first_statement_in_the_constructor: diag(90002, ts.DiagnosticCategory.Message, "Make_super_call_the_first_statement_in_the_constructor_90002", "Make 'super()' call the first statement in the constructor."),
Change_extends_to_implements: diag(90003, ts.DiagnosticCategory.Message, "Change_extends_to_implements_90003", "Change 'extends' to 'implements'."),
Remove_declaration_for_Colon_0: diag(90004, ts.DiagnosticCategory.Message, "Remove_declaration_for_Colon_0_90004", "Remove declaration for: '{0}'."),
Implement_interface_0: diag(90006, ts.DiagnosticCategory.Message, "Implement_interface_0_90006", "Implement interface '{0}'."),
Implement_inherited_abstract_class: diag(90007, ts.DiagnosticCategory.Message, "Implement_inherited_abstract_class_90007", "Implement inherited abstract class."),
Add_this_to_unresolved_variable: diag(90008, ts.DiagnosticCategory.Message, "Add_this_to_unresolved_variable_90008", "Add 'this.' to unresolved variable."),
Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript_files_Learn_more_at_https_Colon_Slash_Slashaka_ms_Slashtsconfig: diag(90009, ts.DiagnosticCategory.Error, "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__90009", "Adding a tsconfig.json file will help organize projects that contain both TypeScript and JavaScript files. Learn more at https://aka.ms/tsconfig."),
Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated: diag(90010, ts.DiagnosticCategory.Error, "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_90010", "Type '{0}' is not assignable to type '{1}'. Two different types with this name exist, but they are unrelated."),
Import_0_from_1: diag(90013, ts.DiagnosticCategory.Message, "Import_0_from_1_90013", "Import '{0}' from \"{1}\"."),
Change_0_to_1: diag(90014, ts.DiagnosticCategory.Message, "Change_0_to_1_90014", "Change '{0}' to '{1}'."),
Add_0_to_existing_import_declaration_from_1: diag(90015, ts.DiagnosticCategory.Message, "Add_0_to_existing_import_declaration_from_1_90015", "Add '{0}' to existing import declaration from \"{1}\"."),
Declare_property_0: diag(90016, ts.DiagnosticCategory.Message, "Declare_property_0_90016", "Declare property '{0}'."),
Add_index_signature_for_property_0: diag(90017, ts.DiagnosticCategory.Message, "Add_index_signature_for_property_0_90017", "Add index signature for property '{0}'."),
Disable_checking_for_this_file: diag(90018, ts.DiagnosticCategory.Message, "Disable_checking_for_this_file_90018", "Disable checking for this file."),
Ignore_this_error_message: diag(90019, ts.DiagnosticCategory.Message, "Ignore_this_error_message_90019", "Ignore this error message."),
Initialize_property_0_in_the_constructor: diag(90020, ts.DiagnosticCategory.Message, "Initialize_property_0_in_the_constructor_90020", "Initialize property '{0}' in the constructor."),
Initialize_static_property_0: diag(90021, ts.DiagnosticCategory.Message, "Initialize_static_property_0_90021", "Initialize static property '{0}'."),
Change_spelling_to_0: diag(90022, ts.DiagnosticCategory.Message, "Change_spelling_to_0_90022", "Change spelling to '{0}'."),
Declare_method_0: diag(90023, ts.DiagnosticCategory.Message, "Declare_method_0_90023", "Declare method '{0}'."),
Declare_static_method_0: diag(90024, ts.DiagnosticCategory.Message, "Declare_static_method_0_90024", "Declare static method '{0}'."),
Prefix_0_with_an_underscore: diag(90025, ts.DiagnosticCategory.Message, "Prefix_0_with_an_underscore_90025", "Prefix '{0}' with an underscore."),
Rewrite_as_the_indexed_access_type_0: diag(90026, ts.DiagnosticCategory.Message, "Rewrite_as_the_indexed_access_type_0_90026", "Rewrite as the indexed access type '{0}'."),
Declare_static_property_0: diag(90027, ts.DiagnosticCategory.Message, "Declare_static_property_0_90027", "Declare static property '{0}'."),
Call_decorator_expression: diag(90028, ts.DiagnosticCategory.Message, "Call_decorator_expression_90028", "Call decorator expression."),
Convert_function_to_an_ES2015_class: diag(95001, ts.DiagnosticCategory.Message, "Convert_function_to_an_ES2015_class_95001", "Convert function to an ES2015 class"),
Convert_function_0_to_class: diag(95002, ts.DiagnosticCategory.Message, "Convert_function_0_to_class_95002", "Convert function '{0}' to class"),
Extract_symbol: diag(95003, ts.DiagnosticCategory.Message, "Extract_symbol_95003", "Extract symbol"),
Extract_to_0_in_1: diag(95004, ts.DiagnosticCategory.Message, "Extract_to_0_in_1_95004", "Extract to {0} in {1}"),
Extract_function: diag(95005, ts.DiagnosticCategory.Message, "Extract_function_95005", "Extract function"),
Extract_constant: diag(95006, ts.DiagnosticCategory.Message, "Extract_constant_95006", "Extract constant"),
Extract_to_0_in_enclosing_scope: diag(95007, ts.DiagnosticCategory.Message, "Extract_to_0_in_enclosing_scope_95007", "Extract to {0} in enclosing scope"),
Extract_to_0_in_1_scope: diag(95008, ts.DiagnosticCategory.Message, "Extract_to_0_in_1_scope_95008", "Extract to {0} in {1} scope"),
Annotate_with_type_from_JSDoc: diag(95009, ts.DiagnosticCategory.Message, "Annotate_with_type_from_JSDoc_95009", "Annotate with type from JSDoc"),
Annotate_with_types_from_JSDoc: diag(95010, ts.DiagnosticCategory.Message, "Annotate_with_types_from_JSDoc_95010", "Annotate with types from JSDoc"),
Infer_type_of_0_from_usage: diag(95011, ts.DiagnosticCategory.Message, "Infer_type_of_0_from_usage_95011", "Infer type of '{0}' from usage."),
Infer_parameter_types_from_usage: diag(95012, ts.DiagnosticCategory.Message, "Infer_parameter_types_from_usage_95012", "Infer parameter types from usage."),
};
})(ts || (ts = {}));
var ts;
(function (ts) {
function tokenIsIdentifierOrKeyword(token) {
return token >= 71;
}
ts.tokenIsIdentifierOrKeyword = tokenIsIdentifierOrKeyword;
var textToToken = ts.createMapFromTemplate({
"abstract": 117,
"any": 119,
"as": 118,
"boolean": 122,
"break": 72,
"case": 73,
"catch": 74,
"class": 75,
"continue": 77,
"const": 76,
"constructor": 123,
"debugger": 78,
"declare": 124,
"default": 79,
"delete": 80,
"do": 81,
"else": 82,
"enum": 83,
"export": 84,
"extends": 85,
"false": 86,
"finally": 87,
"for": 88,
"from": 140,
"function": 89,
"get": 125,
"if": 90,
"implements": 108,
"import": 91,
"in": 92,
"instanceof": 93,
"interface": 109,
"is": 126,
"keyof": 127,
"let": 110,
"module": 128,
"namespace": 129,
"never": 130,
"new": 94,
"null": 95,
"number": 133,
"object": 134,
"package": 111,
"private": 112,
"protected": 113,
"public": 114,
"readonly": 131,
"require": 132,
"global": 141,
"return": 96,
"set": 135,
"static": 115,
"string": 136,
"super": 97,
"switch": 98,
"symbol": 137,
"this": 99,
"throw": 100,
"true": 101,
"try": 102,
"type": 138,
"typeof": 103,
"undefined": 139,
"var": 104,
"void": 105,
"while": 106,
"with": 107,
"yield": 116,
"async": 120,
"await": 121,
"of": 142,
"{": 17,
"}": 18,
"(": 19,
")": 20,
"[": 21,
"]": 22,
".": 23,
"...": 24,
";": 25,
",": 26,
"<": 27,
">": 29,
"<=": 30,
">=": 31,
"==": 32,
"!=": 33,
"===": 34,
"!==": 35,
"=>": 36,
"+": 37,
"-": 38,
"**": 40,
"*": 39,
"/": 41,
"%": 42,
"++": 43,
"--": 44,
"<<": 45,
"</": 28,
">>": 46,
">>>": 47,
"&": 48,
"|": 49,
"^": 50,
"!": 51,
"~": 52,
"&&": 53,
"||": 54,
"?": 55,
":": 56,
"=": 58,
"+=": 59,
"-=": 60,
"*=": 61,
"**=": 62,
"/=": 63,
"%=": 64,
"<<=": 65,
">>=": 66,
">>>=": 67,
"&=": 68,
"|=": 69,
"^=": 70,
"@": 57,
});
var unicodeES3IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1610, 1649, 1747, 1749, 1749, 1765, 1766, 1786, 1788, 1808, 1808, 1810, 1836, 1920, 1957, 2309, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2784, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3294, 3294, 3296, 3297, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3424, 3425, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3805, 3840, 3840, 3904, 3911, 3913, 3946, 3976, 3979, 4096, 4129, 4131, 4135, 4137, 4138, 4176, 4181, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6067, 6176, 6263, 6272, 6312, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8319, 8319, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12346, 12353, 12436, 12445, 12446, 12449, 12538, 12540, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65138, 65140, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,];
var unicodeES3IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 543, 546, 563, 592, 685, 688, 696, 699, 705, 720, 721, 736, 740, 750, 750, 768, 846, 864, 866, 890, 890, 902, 902, 904, 906, 908, 908, 910, 929, 931, 974, 976, 983, 986, 1011, 1024, 1153, 1155, 1158, 1164, 1220, 1223, 1224, 1227, 1228, 1232, 1269, 1272, 1273, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1441, 1443, 1465, 1467, 1469, 1471, 1471, 1473, 1474, 1476, 1476, 1488, 1514, 1520, 1522, 1569, 1594, 1600, 1621, 1632, 1641, 1648, 1747, 1749, 1756, 1759, 1768, 1770, 1773, 1776, 1788, 1808, 1836, 1840, 1866, 1920, 1968, 2305, 2307, 2309, 2361, 2364, 2381, 2384, 2388, 2392, 2403, 2406, 2415, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2492, 2494, 2500, 2503, 2504, 2507, 2509, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2562, 2562, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2649, 2652, 2654, 2654, 2662, 2676, 2689, 2691, 2693, 2699, 2701, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2784, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2870, 2873, 2876, 2883, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2913, 2918, 2927, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 2997, 2999, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3031, 3031, 3047, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3134, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3168, 3169, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3262, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3297, 3302, 3311, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3368, 3370, 3385, 3390, 3395, 3398, 3400, 3402, 3405, 3415, 3415, 3424, 3425, 3430, 3439, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3805, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3946, 3953, 3972, 3974, 3979, 3984, 3991, 3993, 4028, 4038, 4038, 4096, 4129, 4131, 4135, 4137, 4138, 4140, 4146, 4150, 4153, 4160, 4169, 4176, 4185, 4256, 4293, 4304, 4342, 4352, 4441, 4447, 4514, 4520, 4601, 4608, 4614, 4616, 4678, 4680, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4742, 4744, 4744, 4746, 4749, 4752, 4782, 4784, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4814, 4816, 4822, 4824, 4846, 4848, 4878, 4880, 4880, 4882, 4885, 4888, 4894, 4896, 4934, 4936, 4954, 4969, 4977, 5024, 5108, 5121, 5740, 5743, 5750, 5761, 5786, 5792, 5866, 6016, 6099, 6112, 6121, 6160, 6169, 6176, 6263, 6272, 6313, 7680, 7835, 7840, 7929, 7936, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8255, 8256, 8319, 8319, 8400, 8412, 8417, 8417, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8497, 8499, 8505, 8544, 8579, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12346, 12353, 12436, 12441, 12442, 12445, 12446, 12449, 12542, 12549, 12588, 12593, 12686, 12704, 12727, 13312, 19893, 19968, 40869, 40960, 42124, 44032, 55203, 63744, 64045, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65056, 65059, 65075, 65076, 65101, 65103, 65136, 65138, 65140, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65381, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,];
var unicodeES5IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,];
var unicodeES5IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112, 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423, 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272, 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072, 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,];
function lookupInUnicodeMap(code, map) {
if (code < map[0]) {
return false;
}
var lo = 0;
var hi = map.length;
var mid;
while (lo + 1 < hi) {
mid = lo + (hi - lo) / 2;
mid -= mid % 2;
if (map[mid] <= code && code <= map[mid + 1]) {
return true;
}
if (code < map[mid]) {
hi = mid;
}
else {
lo = mid + 2;
}
}
return false;
}
function isUnicodeIdentifierStart(code, languageVersion) {
return languageVersion >= 1 ?
lookupInUnicodeMap(code, unicodeES5IdentifierStart) :
lookupInUnicodeMap(code, unicodeES3IdentifierStart);
}
ts.isUnicodeIdentifierStart = isUnicodeIdentifierStart;
function isUnicodeIdentifierPart(code, languageVersion) {
return languageVersion >= 1 ?
lookupInUnicodeMap(code, unicodeES5IdentifierPart) :
lookupInUnicodeMap(code, unicodeES3IdentifierPart);
}
function makeReverseMap(source) {
var result = [];
source.forEach(function (value, name) {
result[value] = name;
});
return result;
}
var tokenStrings = makeReverseMap(textToToken);
function tokenToString(t) {
return tokenStrings[t];
}
ts.tokenToString = tokenToString;
function stringToToken(s) {
return textToToken.get(s);
}
ts.stringToToken = stringToToken;
function computeLineStarts(text) {
var result = new Array();
var pos = 0;
var lineStart = 0;
while (pos < text.length) {
var ch = text.charCodeAt(pos);
pos++;
switch (ch) {
case 13:
if (text.charCodeAt(pos) === 10) {
pos++;
}
case 10:
result.push(lineStart);
lineStart = pos;
break;
default:
if (ch > 127 && isLineBreak(ch)) {
result.push(lineStart);
lineStart = pos;
}
break;
}
}
result.push(lineStart);
return result;
}
ts.computeLineStarts = computeLineStarts;
function getPositionOfLineAndCharacter(sourceFile, line, character) {
return computePositionOfLineAndCharacter(getLineStarts(sourceFile), line, character, sourceFile.text);
}
ts.getPositionOfLineAndCharacter = getPositionOfLineAndCharacter;
function computePositionOfLineAndCharacter(lineStarts, line, character, debugText) {
ts.Debug.assert(line >= 0 && line < lineStarts.length);
var res = lineStarts[line] + character;
if (line < lineStarts.length - 1) {
ts.Debug.assert(res < lineStarts[line + 1]);
}
else if (debugText !== undefined) {
ts.Debug.assert(res <= debugText.length);
}
return res;
}
ts.computePositionOfLineAndCharacter = computePositionOfLineAndCharacter;
function getLineStarts(sourceFile) {
return sourceFile.lineMap || (sourceFile.lineMap = computeLineStarts(sourceFile.text));
}
ts.getLineStarts = getLineStarts;
function computeLineAndCharacterOfPosition(lineStarts, position) {
var lineNumber = ts.binarySearch(lineStarts, position);
if (lineNumber < 0) {
lineNumber = ~lineNumber - 1;
ts.Debug.assert(lineNumber !== -1, "position cannot precede the beginning of the file");
}
return {
line: lineNumber,
character: position - lineStarts[lineNumber]
};
}
ts.computeLineAndCharacterOfPosition = computeLineAndCharacterOfPosition;
function getLineAndCharacterOfPosition(sourceFile, position) {
return computeLineAndCharacterOfPosition(getLineStarts(sourceFile), position);
}
ts.getLineAndCharacterOfPosition = getLineAndCharacterOfPosition;
function isWhiteSpaceLike(ch) {
return isWhiteSpaceSingleLine(ch) || isLineBreak(ch);
}
ts.isWhiteSpaceLike = isWhiteSpaceLike;
function isWhiteSpaceSingleLine(ch) {
return ch === 32 ||
ch === 9 ||
ch === 11 ||
ch === 12 ||
ch === 160 ||
ch === 133 ||
ch === 5760 ||
ch >= 8192 && ch <= 8203 ||
ch === 8239 ||
ch === 8287 ||
ch === 12288 ||
ch === 65279;
}
ts.isWhiteSpaceSingleLine = isWhiteSpaceSingleLine;
function isLineBreak(ch) {
return ch === 10 ||
ch === 13 ||
ch === 8232 ||
ch === 8233;
}
ts.isLineBreak = isLineBreak;
function isDigit(ch) {
return ch >= 48 && ch <= 57;
}
function isOctalDigit(ch) {
return ch >= 48 && ch <= 55;
}
ts.isOctalDigit = isOctalDigit;
function couldStartTrivia(text, pos) {
var ch = text.charCodeAt(pos);
switch (ch) {
case 13:
case 10:
case 9:
case 11:
case 12:
case 32:
case 47:
case 60:
case 124:
case 61:
case 62:
return true;
case 35:
return pos === 0;
default:
return ch > 127;
}
}
ts.couldStartTrivia = couldStartTrivia;
function skipTrivia(text, pos, stopAfterLineBreak, stopAtComments) {
if (stopAtComments === void 0) { stopAtComments = false; }
if (ts.positionIsSynthesized(pos)) {
return pos;
}
while (true) {
var ch = text.charCodeAt(pos);
switch (ch) {
case 13:
if (text.charCodeAt(pos + 1) === 10) {
pos++;
}
case 10:
pos++;
if (stopAfterLineBreak) {
return pos;
}
continue;
case 9:
case 11:
case 12:
case 32:
pos++;
continue;
case 47:
if (stopAtComments) {
break;
}
if (text.charCodeAt(pos + 1) === 47) {
pos += 2;
while (pos < text.length) {
if (isLineBreak(text.charCodeAt(pos))) {
break;
}
pos++;
}
continue;
}
if (text.charCodeAt(pos + 1) === 42) {
pos += 2;
while (pos < text.length) {
if (text.charCodeAt(pos) === 42 && text.charCodeAt(pos + 1) === 47) {
pos += 2;
break;
}
pos++;
}
continue;
}
break;
case 60:
case 124:
case 61:
case 62:
if (isConflictMarkerTrivia(text, pos)) {
pos = scanConflictMarkerTrivia(text, pos);
continue;
}
break;
case 35:
if (pos === 0 && isShebangTrivia(text, pos)) {
pos = scanShebangTrivia(text, pos);
continue;
}
break;
default:
if (ch > 127 && (isWhiteSpaceLike(ch))) {
pos++;
continue;
}
break;
}
return pos;
}
}
ts.skipTrivia = skipTrivia;
var mergeConflictMarkerLength = "<<<<<<<".length;
function isConflictMarkerTrivia(text, pos) {
ts.Debug.assert(pos >= 0);
if (pos === 0 || isLineBreak(text.charCodeAt(pos - 1))) {
var ch = text.charCodeAt(pos);
if ((pos + mergeConflictMarkerLength) < text.length) {
for (var i = 0; i < mergeConflictMarkerLength; i++) {
if (text.charCodeAt(pos + i) !== ch) {
return false;
}
}
return ch === 61 ||
text.charCodeAt(pos + mergeConflictMarkerLength) === 32;
}
}
return false;
}
function scanConflictMarkerTrivia(text, pos, error) {
if (error) {
error(ts.Diagnostics.Merge_conflict_marker_encountered, mergeConflictMarkerLength);
}
var ch = text.charCodeAt(pos);
var len = text.length;
if (ch === 60 || ch === 62) {
while (pos < len && !isLineBreak(text.charCodeAt(pos))) {
pos++;
}
}
else {
ts.Debug.assert(ch === 124 || ch === 61);
while (pos < len) {
var currentChar = text.charCodeAt(pos);
if ((currentChar === 61 || currentChar === 62) && currentChar !== ch && isConflictMarkerTrivia(text, pos)) {
break;
}
pos++;
}
}
return pos;
}
var shebangTriviaRegex = /^#!.*/;
function isShebangTrivia(text, pos) {
ts.Debug.assert(pos === 0);
return shebangTriviaRegex.test(text);
}
function scanShebangTrivia(text, pos) {
var shebang = shebangTriviaRegex.exec(text)[0];
pos = pos + shebang.length;
return pos;
}
function iterateCommentRanges(reduce, text, pos, trailing, cb, state, initial) {
var pendingPos;
var pendingEnd;
var pendingKind;
var pendingHasTrailingNewLine;
var hasPendingCommentRange = false;
var collecting = trailing || pos === 0;
var accumulator = initial;
scan: while (pos >= 0 && pos < text.length) {
var ch = text.charCodeAt(pos);
switch (ch) {
case 13:
if (text.charCodeAt(pos + 1) === 10) {
pos++;
}
case 10:
pos++;
if (trailing) {
break scan;
}
collecting = true;
if (hasPendingCommentRange) {
pendingHasTrailingNewLine = true;
}
continue;
case 9:
case 11:
case 12:
case 32:
pos++;
continue;
case 47:
var nextChar = text.charCodeAt(pos + 1);
var hasTrailingNewLine = false;
if (nextChar === 47 || nextChar === 42) {
var kind = nextChar === 47 ? 2 : 3;
var startPos = pos;
pos += 2;
if (nextChar === 47) {
while (pos < text.length) {
if (isLineBreak(text.charCodeAt(pos))) {
hasTrailingNewLine = true;
break;
}
pos++;
}
}
else {
while (pos < text.length) {
if (text.charCodeAt(pos) === 42 && text.charCodeAt(pos + 1) === 47) {
pos += 2;
break;
}
pos++;
}
}
if (collecting) {
if (hasPendingCommentRange) {
accumulator = cb(pendingPos, pendingEnd, pendingKind, pendingHasTrailingNewLine, state, accumulator);
if (!reduce && accumulator) {
return accumulator;
}
hasPendingCommentRange = false;
}
pendingPos = startPos;
pendingEnd = pos;
pendingKind = kind;
pendingHasTrailingNewLine = hasTrailingNewLine;
hasPendingCommentRange = true;
}
continue;
}
break scan;
default:
if (ch > 127 && (isWhiteSpaceLike(ch))) {
if (hasPendingCommentRange && isLineBreak(ch)) {
pendingHasTrailingNewLine = true;
}
pos++;
continue;
}
break scan;
}
}
if (hasPendingCommentRange) {
accumulator = cb(pendingPos, pendingEnd, pendingKind, pendingHasTrailingNewLine, state, accumulator);
}
return accumulator;
}
function forEachLeadingCommentRange(text, pos, cb, state) {
return iterateCommentRanges(false, text, pos, false, cb, state);
}
ts.forEachLeadingCommentRange = forEachLeadingCommentRange;
function forEachTrailingCommentRange(text, pos, cb, state) {
return iterateCommentRanges(false, text, pos, true, cb, state);
}
ts.forEachTrailingCommentRange = forEachTrailingCommentRange;
function reduceEachLeadingCommentRange(text, pos, cb, state, initial) {
return iterateCommentRanges(true, text, pos, false, cb, state, initial);
}
ts.reduceEachLeadingCommentRange = reduceEachLeadingCommentRange;
function reduceEachTrailingCommentRange(text, pos, cb, state, initial) {
return iterateCommentRanges(true, text, pos, true, cb, state, initial);
}
ts.reduceEachTrailingCommentRange = reduceEachTrailingCommentRange;
function appendCommentRange(pos, end, kind, hasTrailingNewLine, _state, comments) {
if (!comments) {
comments = [];
}
comments.push({ kind: kind, pos: pos, end: end, hasTrailingNewLine: hasTrailingNewLine });
return comments;
}
function getLeadingCommentRanges(text, pos) {
return reduceEachLeadingCommentRange(text, pos, appendCommentRange, undefined, undefined);
}
ts.getLeadingCommentRanges = getLeadingCommentRanges;
function getTrailingCommentRanges(text, pos) {
return reduceEachTrailingCommentRange(text, pos, appendCommentRange, undefined, undefined);
}
ts.getTrailingCommentRanges = getTrailingCommentRanges;
function getShebang(text) {
var match = shebangTriviaRegex.exec(text);
if (match) {
return match[0];
}
}
ts.getShebang = getShebang;
function isIdentifierStart(ch, languageVersion) {
return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 ||
ch === 36 || ch === 95 ||
ch > 127 && isUnicodeIdentifierStart(ch, languageVersion);
}
ts.isIdentifierStart = isIdentifierStart;
function isIdentifierPart(ch, languageVersion) {
return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 ||
ch >= 48 && ch <= 57 || ch === 36 || ch === 95 ||
ch > 127 && isUnicodeIdentifierPart(ch, languageVersion);
}
ts.isIdentifierPart = isIdentifierPart;
function isIdentifierText(name, languageVersion) {
if (!isIdentifierStart(name.charCodeAt(0), languageVersion)) {
return false;
}
for (var i = 1; i < name.length; i++) {
if (!isIdentifierPart(name.charCodeAt(i), languageVersion)) {
return false;
}
}
return true;
}
ts.isIdentifierText = isIdentifierText;
function createScanner(languageVersion, skipTrivia, languageVariant, 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;
var numericLiteralFlags;
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 === 71 || token > 107; },
isReservedWord: function () { return token >= 72 && token <= 107; },
isUnterminated: function () { return tokenIsUnterminated; },
getNumericLiteralFlags: function () { return numericLiteralFlags; },
reScanGreaterToken: reScanGreaterToken,
reScanSlashToken: reScanSlashToken,
reScanTemplateToken: reScanTemplateToken,
scanJsxIdentifier: scanJsxIdentifier,
scanJsxAttributeValue: scanJsxAttributeValue,
reScanJsxToken: reScanJsxToken,
scanJsxToken: scanJsxToken,
scanJSDocToken: scanJSDocToken,
scan: scan,
getText: getText,
setText: setText,
setScriptTarget: setScriptTarget,
setLanguageVariant: setLanguageVariant,
setOnError: setOnError,
setTextPos: setTextPos,
tryScan: tryScan,
lookAhead: lookAhead,
scanRange: scanRange,
};
function error(message, 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++;
numericLiteralFlags = 2;
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(allowEscapes) {
if (allowEscapes === void 0) { allowEscapes = true; }
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 && allowEscapes) {
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 ? 13 : 16;
break;
}
var currChar = text.charCodeAt(pos);
if (currChar === 96) {
contents += text.substring(start, pos);
pos++;
resultingToken = startedWithBacktick ? 13 : 16;
break;
}
if (currChar === 36 && pos + 1 < end && text.charCodeAt(pos + 1) === 123) {
contents += text.substring(start, pos);
pos += 2;
resultingToken = startedWithBacktick ? 14 : 15;
break;
}
if (currChar === 92) {
contents += text.substring(start, pos);
contents += scanEscapeSequence();
start = pos;
continue;
}
if (currChar === 13) {
contents += text.substring(start, pos);
pos++;
if (pos < end && text.charCodeAt(pos) === 10) {
pos++;
}
contents += "\n";
start = pos;
continue;
}
pos++;
}
ts.Debug.assert(resultingToken !== undefined);
tokenValue = contents;
return resultingToken;
}
function scanEscapeSequence() {
pos++;
if (pos >= end) {
error(ts.Diagnostics.Unexpected_end_of_text);
return "";
}
var ch = text.charCodeAt(pos);
pos++;
switch (ch) {
case 48:
return "\0";
case 98:
return "\b";
case 116:
return "\t";
case 110:
return "\n";
case 118:
return "\v";
case 102:
return "\f";
case 114:
return "\r";
case 39:
return "\'";
case 34:
return "\"";
case 117:
if (pos < end && text.charCodeAt(pos) === 123) {
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) {
token = textToToken.get(tokenValue);
if (token !== undefined) {
return token;
}
}
}
return token = 71;
}
function scanBinaryOrOctalDigits(base) {
ts.Debug.assert(base === 2 || base === 8, "Expected either base 2 or base 8");
var value = 0;
var numberOfDigits = 0;
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;
numericLiteralFlags = 0;
while (true) {
tokenPos = pos;
if (pos >= end) {
return token = 1;
}
var ch = text.charCodeAt(pos);
if (ch === 35 && pos === 0 && isShebangTrivia(text, pos)) {
pos = scanShebangTrivia(text, pos);
if (skipTrivia) {
continue;
}
else {
return token = 6;
}
}
switch (ch) {
case 10:
case 13:
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 && isWhiteSpaceSingleLine(text.charCodeAt(pos))) {
pos++;
}
return token = 5;
}
case 33:
if (text.charCodeAt(pos + 1) === 61) {
if (text.charCodeAt(pos + 2) === 61) {
return pos += 3, token = 35;
}
return pos += 2, token = 33;
}
pos++;
return token = 51;
case 34:
case 39:
tokenValue = scanString();
return token = 9;
case 96:
return token = scanTemplateAndSetTokenValue();
case 37:
if (text.charCodeAt(pos + 1) === 61) {
return pos += 2, token = 64;
}
pos++;
return token = 42;
case 38:
if (text.charCodeAt(pos + 1) === 38) {
return pos += 2, token = 53;
}
if (text.charCodeAt(pos + 1) === 61) {
return pos += 2, token = 68;
}
pos++;
return token = 48;
case 40:
pos++;
return token = 19;
case 41:
pos++;
return token = 20;
case 42:
if (text.charCodeAt(pos + 1) === 61) {
return pos += 2, token = 61;
}
if (text.charCodeAt(pos + 1) === 42) {
if (text.charCodeAt(pos + 2) === 61) {
return pos += 3, token = 62;
}
return pos += 2, token = 40;
}
pos++;
return token = 39;
case 43:
if (text.charCodeAt(pos + 1) === 43) {
return pos += 2, token = 43;
}
if (text.charCodeAt(pos + 1) === 61) {
return pos += 2, token = 59;
}
pos++;
return token = 37;
case 44:
pos++;
return token = 26;
case 45:
if (text.charCodeAt(pos + 1) === 45) {
return pos += 2, token = 44;
}
if (text.charCodeAt(pos + 1) === 61) {
return pos += 2, token = 60;
}
pos++;
return token = 38;
case 46:
if (isDigit(text.charCodeAt(pos + 1))) {
tokenValue = scanNumber();
return token = 8;
}
if (text.charCodeAt(pos + 1) === 46 && text.charCodeAt(pos + 2) === 46) {
return pos += 3, token = 24;
}
pos++;
return token = 23;
case 47:
if (text.charCodeAt(pos + 1) === 47) {
pos += 2;
while (pos < end) {
if (isLineBreak(text.charCodeAt(pos))) {
break;
}
pos++;
}
if (skipTrivia) {
continue;
}
else {
return token = 2;
}
}
if (text.charCodeAt(pos + 1) === 42) {
pos += 2;
var commentClosed = false;
while (pos < end) {
var ch_1 = text.charCodeAt(pos);
if (ch_1 === 42 && text.charCodeAt(pos + 1) === 47) {
pos += 2;
commentClosed = true;
break;
}
if (isLineBreak(ch_1)) {
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 = 63;
}
pos++;
return token = 41;
case 48:
if (pos + 2 < end && (text.charCodeAt(pos + 1) === 88 || text.charCodeAt(pos + 1) === 120)) {
pos += 2;
var value = scanMinimumNumberOfHexDigits(1);
if (value < 0) {
error(ts.Diagnostics.Hexadecimal_digit_expected);
value = 0;
}
tokenValue = "" + value;
numericLiteralFlags = 8;
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;
numericLiteralFlags = 16;
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;
numericLiteralFlags = 32;
return token = 8;
}
if (pos + 1 < end && isOctalDigit(text.charCodeAt(pos + 1))) {
tokenValue = "" + scanOctalDigits();
numericLiteralFlags = 4;
return token = 8;
}
case 49:
case 50:
case 51:
case 52:
case 53:
case 54:
case 55:
case 56:
case 57:
tokenValue = scanNumber();
return token = 8;
case 58:
pos++;
return token = 56;
case 59:
pos++;
return token = 25;
case 60:
if (isConflictMarkerTrivia(text, pos)) {
pos = scanConflictMarkerTrivia(text, pos, error);
if (skipTrivia) {
continue;
}
else {
return token = 7;
}
}
if (text.charCodeAt(pos + 1) === 60) {
if (text.charCodeAt(pos + 2) === 61) {
return pos += 3, token = 65;
}
return pos += 2, token = 45;
}
if (text.charCodeAt(pos + 1) === 61) {
return pos += 2, token = 30;
}
if (languageVariant === 1 &&
text.charCodeAt(pos + 1) === 47 &&
text.charCodeAt(pos + 2) !== 42) {
return pos += 2, token = 28;
}
pos++;
return token = 27;
case 61:
if (isConflictMarkerTrivia(text, pos)) {
pos = scanConflictMarkerTrivia(text, pos, error);
if (skipTrivia) {
continue;
}
else {
return token = 7;
}
}
if (text.charCodeAt(pos + 1) === 61) {
if (text.charCodeAt(pos + 2) === 61) {
return pos += 3, token = 34;
}
return pos += 2, token = 32;
}
if (text.charCodeAt(pos + 1) === 62) {
return pos += 2, token = 36;
}
pos++;
return token = 58;
case 62:
if (isConflictMarkerTrivia(text, pos)) {
pos = scanConflictMarkerTrivia(text, pos, error);
if (skipTrivia) {
continue;
}
else {
return token = 7;
}
}
pos++;
return token = 29;
case 63:
pos++;
return token = 55;
case 91:
pos++;
return token = 21;
case 93:
pos++;
return token = 22;
case 94:
if (text.charCodeAt(pos + 1) === 61) {
return pos += 2, token = 70;
}
pos++;
return token = 50;
case 123:
pos++;
return token = 17;
case 124:
if (isConflictMarkerTrivia(text, pos)) {
pos = scanConflictMarkerTrivia(text, pos, error);
if (skipTrivia) {
continue;
}
else {
return token = 7;
}
}
if (text.charCodeAt(pos + 1) === 124) {
return pos += 2, token = 54;
}
if (text.charCodeAt(pos + 1) === 61) {
return pos += 2, token = 69;
}
pos++;
return token = 49;
case 125:
pos++;
return token = 18;
case 126:
pos++;
return token = 52;
case 64:
pos++;
return token = 57;
case 92:
var cookedChar = peekUnicodeEscape();
if (cookedChar >= 0 && isIdentifierStart(cookedChar, languageVersion)) {
pos += 6;
tokenValue = String.fromCharCode(cookedChar) + scanIdentifierParts();
return token = getIdentifierToken();
}
error(ts.Diagnostics.Invalid_character);
pos++;
return token = 0;
default:
if (isIdentifierStart(ch, languageVersion)) {
pos++;
while (pos < end && isIdentifierPart(ch = text.charCodeAt(pos), languageVersion))
pos++;
tokenValue = text.substring(tokenPos, pos);
if (ch === 92) {
tokenValue += scanIdentifierParts();
}
return token = getIdentifierToken();
}
else if (isWhiteSpaceSingleLine(ch)) {
pos++;
continue;
}
else if (isLineBreak(ch)) {
precedingLineBreak = true;
pos++;
continue;
}
error(ts.Diagnostics.Invalid_character);
pos++;
return token = 0;
}
}
}
function reScanGreaterToken() {
if (token === 29) {
if (text.charCodeAt(pos) === 62) {
if (text.charCodeAt(pos + 1) === 62) {
if (text.charCodeAt(pos + 2) === 61) {
return pos += 3, token = 67;
}
return pos += 2, token = 47;
}
if (text.charCodeAt(pos + 1) === 61) {
return pos += 2, token = 66;
}
pos++;
return token = 46;
}
if (text.charCodeAt(pos) === 61) {
pos++;
return token = 31;
}
}
return token;
}
function reScanSlashToken() {
if (token === 41 || token === 63) {
var p = tokenPos + 1;
var inEscape = false;
var inCharacterClass = false;
while (true) {
if (p >= end) {
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 = 12;
}
return token;
}
function reScanTemplateToken() {
ts.Debug.assert(token === 18, "'reScanTemplateToken' should only be called on a '}'");
pos = tokenPos;
return token = scanTemplateAndSetTokenValue();
}
function reScanJsxToken() {
pos = tokenPos = startPos;
return token = scanJsxToken();
}
function scanJsxToken() {
startPos = tokenPos = pos;
if (pos >= end) {
return token = 1;
}
var char = text.charCodeAt(pos);
if (char === 60) {
if (text.charCodeAt(pos + 1) === 47) {
pos += 2;
return token = 28;
}
pos++;
return token = 27;
}
if (char === 123) {
pos++;
return token = 17;
}
var firstNonWhitespace = 0;
while (pos < end) {
char = text.charCodeAt(pos);
if (char === 123) {
break;
}
if (char === 60) {
if (isConflictMarkerTrivia(text, pos)) {
pos = scanConflictMarkerTrivia(text, pos, error);
return token = 7;
}
break;
}
if (isLineBreak(char) && firstNonWhitespace === 0) {
firstNonWhitespace = -1;
}
else if (!isWhiteSpaceLike(char)) {
firstNonWhitespace = pos;
}
pos++;
}
return firstNonWhitespace === -1 ? 11 : 10;
}
function scanJsxIdentifier() {
if (tokenIsIdentifierOrKeyword(token)) {
var firstCharPosition = pos;
while (pos < end) {
var ch = text.charCodeAt(pos);
if (ch === 45 || ((firstCharPosition === pos) ? isIdentifierStart(ch, languageVersion) : isIdentifierPart(ch, languageVersion))) {
pos++;
}
else {
break;
}
}
tokenValue += text.substr(firstCharPosition, pos - firstCharPosition);
}
return token;
}
function scanJsxAttributeValue() {
startPos = pos;
switch (text.charCodeAt(pos)) {
case 34:
case 39:
tokenValue = scanString(false);
return token = 9;
default:
return scan();
}
}
function scanJSDocToken() {
if (pos >= end) {
return token = 1;
}
startPos = pos;
tokenPos = pos;
var ch = text.charCodeAt(pos);
switch (ch) {
case 9:
case 11:
case 12:
case 32:
while (pos < end && isWhiteSpaceSingleLine(text.charCodeAt(pos))) {
pos++;
}
return token = 5;
case 64:
pos++;
return token = 57;
case 10:
case 13:
pos++;
return token = 4;
case 42:
pos++;
return token = 39;
case 123:
pos++;
return token = 17;
case 125:
pos++;
return token = 18;
case 91:
pos++;
return token = 21;
case 93:
pos++;
return token = 22;
case 60:
pos++;
return token = 27;
case 62:
pos++;
return token = 29;
case 61:
pos++;
return token = 58;
case 44:
pos++;
return token = 26;
case 46:
pos++;
return token = 23;
}
if (isIdentifierStart(ch, 5)) {
pos++;
while (isIdentifierPart(text.charCodeAt(pos), 5) && pos < end) {
pos++;
}
return token = 71;
}
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 getText() {
return text;
}
function setText(newText, start, length) {
text = newText || "";
end = length === undefined ? text.length : start + length;
setTextPos(start || 0);
}
function setOnError(errorCallback) {
onError = errorCallback;
}
function setScriptTarget(scriptTarget) {
languageVersion = scriptTarget;
}
function setLanguageVariant(variant) {
languageVariant = variant;
}
function setTextPos(textPos) {
ts.Debug.assert(textPos >= 0);
pos = textPos;
startPos = textPos;
tokenPos = textPos;
token = 0;
precedingLineBreak = false;
tokenValue = undefined;
hasExtendedUnicodeEscape = false;
tokenIsUnterminated = false;
}
}
ts.createScanner = createScanner;
})(ts || (ts = {}));
var ts;
(function (ts) {
ts.emptyArray = [];
ts.emptyMap = ts.createMap();
ts.externalHelpersModuleNameText = "tslib";
function getDeclarationOfKind(symbol, kind) {
var declarations = symbol.declarations;
if (declarations) {
for (var _i = 0, declarations_1 = declarations; _i < declarations_1.length; _i++) {
var declaration = declarations_1[_i];
if (declaration.kind === kind) {
return declaration;
}
}
}
return undefined;
}
ts.getDeclarationOfKind = getDeclarationOfKind;
var stringWriter = createSingleLineStringWriter();
function createSingleLineStringWriter() {
var str = "";
var writeText = function (text) { return str += text; };
return {
string: function () { return str; },
writeKeyword: writeText,
writeOperator: writeText,
writePunctuation: writeText,
writeSpace: writeText,
writeStringLiteral: writeText,
writeParameter: writeText,
writeProperty: writeText,
writeSymbol: writeText,
writeLine: function () { return str += " "; },
increaseIndent: ts.noop,
decreaseIndent: ts.noop,
clear: function () { return str = ""; },
trackSymbol: ts.noop,
reportInaccessibleThisError: ts.noop,
reportPrivateInBaseOfClassExpression: ts.noop,
};
}
function usingSingleLineStringWriter(action) {
var oldString = stringWriter.string();
try {
action(stringWriter);
return stringWriter.string();
}
finally {
stringWriter.clear();
stringWriter.writeKeyword(oldString);
}
}
ts.usingSingleLineStringWriter = usingSingleLineStringWriter;
function getFullWidth(node) {
return node.end - node.pos;
}
ts.getFullWidth = getFullWidth;
function getResolvedModule(sourceFile, moduleNameText) {
return sourceFile && sourceFile.resolvedModules && sourceFile.resolvedModules.get(moduleNameText);
}
ts.getResolvedModule = getResolvedModule;
function setResolvedModule(sourceFile, moduleNameText, resolvedModule) {
if (!sourceFile.resolvedModules) {
sourceFile.resolvedModules = ts.createMap();
}
sourceFile.resolvedModules.set(moduleNameText, resolvedModule);
}
ts.setResolvedModule = setResolvedModule;
function setResolvedTypeReferenceDirective(sourceFile, typeReferenceDirectiveName, resolvedTypeReferenceDirective) {
if (!sourceFile.resolvedTypeReferenceDirectiveNames) {
sourceFile.resolvedTypeReferenceDirectiveNames = ts.createMap();
}
sourceFile.resolvedTypeReferenceDirectiveNames.set(typeReferenceDirectiveName, resolvedTypeReferenceDirective);
}
ts.setResolvedTypeReferenceDirective = setResolvedTypeReferenceDirective;
function moduleResolutionIsEqualTo(oldResolution, newResolution) {
return oldResolution.isExternalLibraryImport === newResolution.isExternalLibraryImport &&
oldResolution.extension === newResolution.extension &&
oldResolution.resolvedFileName === newResolution.resolvedFileName &&
packageIdIsEqual(oldResolution.packageId, newResolution.packageId);
}
ts.moduleResolutionIsEqualTo = moduleResolutionIsEqualTo;
function packageIdIsEqual(a, b) {
return a === b || a && b && a.name === b.name && a.subModuleName === b.subModuleName && a.version === b.version;
}
function typeDirectiveIsEqualTo(oldResolution, newResolution) {
return oldResolution.resolvedFileName === newResolution.resolvedFileName && oldResolution.primary === newResolution.primary;
}
ts.typeDirectiveIsEqualTo = typeDirectiveIsEqualTo;
function hasChangesInResolutions(names, newResolutions, oldResolutions, comparer) {
ts.Debug.assert(names.length === newResolutions.length);
for (var i = 0; i < names.length; i++) {
var newResolution = newResolutions[i];
var oldResolution = oldResolutions && oldResolutions.get(names[i]);
var changed = oldResolution
? !newResolution || !comparer(oldResolution, newResolution)
: newResolution;
if (changed) {
return true;
}
}
return false;
}
ts.hasChangesInResolutions = hasChangesInResolutions;
function containsParseError(node) {
aggregateChildData(node);
return (node.flags & 131072) !== 0;
}
ts.containsParseError = containsParseError;
function aggregateChildData(node) {
if (!(node.flags & 262144)) {
var thisNodeOrAnySubNodesHasError = ((node.flags & 32768) !== 0) ||
ts.forEachChild(node, containsParseError);
if (thisNodeOrAnySubNodesHasError) {
node.flags |= 131072;
}
node.flags |= 262144;
}
}
function getSourceFileOfNode(node) {
while (node && node.kind !== 265) {
node = node.parent;
}
return node;
}
ts.getSourceFileOfNode = getSourceFileOfNode;
function isStatementWithLocals(node) {
switch (node.kind) {
case 207:
case 235:
case 214:
case 215:
case 216:
return true;
}
return false;
}
ts.isStatementWithLocals = isStatementWithLocals;
function getStartPositionOfLine(line, sourceFile) {
ts.Debug.assert(line >= 0);
return ts.getLineStarts(sourceFile)[line];
}
ts.getStartPositionOfLine = getStartPositionOfLine;
function nodePosToString(node) {
var file = getSourceFileOfNode(node);
var loc = ts.getLineAndCharacterOfPosition(file, node.pos);
return file.fileName + "(" + (loc.line + 1) + "," + (loc.character + 1) + ")";
}
ts.nodePosToString = nodePosToString;
function getEndLinePosition(line, sourceFile) {
ts.Debug.assert(line >= 0);
var lineStarts = ts.getLineStarts(sourceFile);
var lineIndex = line;
var sourceText = sourceFile.text;
if (lineIndex + 1 === lineStarts.length) {
return sourceText.length - 1;
}
else {
var start = lineStarts[lineIndex];
var pos = lineStarts[lineIndex + 1] - 1;
ts.Debug.assert(ts.isLineBreak(sourceText.charCodeAt(pos)));
while (start <= pos && ts.isLineBreak(sourceText.charCodeAt(pos))) {
pos--;
}
return pos;
}
}
ts.getEndLinePosition = getEndLinePosition;
function nodeIsMissing(node) {
if (node === undefined) {
return true;
}
return node.pos === node.end && node.pos >= 0 && node.kind !== 1;
}
ts.nodeIsMissing = nodeIsMissing;
function nodeIsPresent(node) {
return !nodeIsMissing(node);
}
ts.nodeIsPresent = nodeIsPresent;
function isRecognizedTripleSlashComment(text, commentPos, commentEnd) {
if (text.charCodeAt(commentPos + 1) === 47 &&
commentPos + 2 < commentEnd &&
text.charCodeAt(commentPos + 2) === 47) {
var textSubStr = text.substring(commentPos, commentEnd);
return textSubStr.match(ts.fullTripleSlashReferencePathRegEx) ||
textSubStr.match(ts.fullTripleSlashAMDReferencePathRegEx) ||
textSubStr.match(fullTripleSlashReferenceTypeReferenceDirectiveRegEx) ||
textSubStr.match(defaultLibReferenceRegEx) ?
true : false;
}
return false;
}
ts.isRecognizedTripleSlashComment = isRecognizedTripleSlashComment;
function isPinnedComment(text, comment) {
return text.charCodeAt(comment.pos + 1) === 42 &&
text.charCodeAt(comment.pos + 2) === 33;
}
ts.isPinnedComment = isPinnedComment;
function getTokenPosOfNode(node, sourceFile, includeJsDoc) {
if (nodeIsMissing(node)) {
return node.pos;
}
if (ts.isJSDocNode(node)) {
return ts.skipTrivia((sourceFile || getSourceFileOfNode(node)).text, node.pos, false, true);
}
if (includeJsDoc && ts.hasJSDocNodes(node)) {
return getTokenPosOfNode(node.jsDoc[0]);
}
if (node.kind === 286 && node._children.length > 0) {
return getTokenPosOfNode(node._children[0], sourceFile, includeJsDoc);
}
return ts.skipTrivia((sourceFile || getSourceFileOfNode(node)).text, node.pos);
}
ts.getTokenPosOfNode = getTokenPosOfNode;
function getNonDecoratorTokenPosOfNode(node, sourceFile) {
if (nodeIsMissing(node) || !node.decorators) {
return getTokenPosOfNode(node, sourceFile);
}
return ts.skipTrivia((sourceFile || getSourceFileOfNode(node)).text, node.decorators.end);
}
ts.getNonDecoratorTokenPosOfNode = getNonDecoratorTokenPosOfNode;
function getSourceTextOfNodeFromSourceFile(sourceFile, node, includeTrivia) {
if (includeTrivia === void 0) { includeTrivia = false; }
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 indexOfNode(nodeArray, node) {
return ts.binarySearch(nodeArray, node, compareNodePos);
}
ts.indexOfNode = indexOfNode;
function compareNodePos(_a, _b) {
var aPos = _a.pos;
var bPos = _b.pos;
return aPos < bPos ? -1 : bPos < aPos ? 1 : 0;
}
function getEmitFlags(node) {
var emitNode = node.emitNode;
return emitNode && emitNode.flags;
}
ts.getEmitFlags = getEmitFlags;
function getLiteralText(node, sourceFile) {
if (!nodeIsSynthesized(node) && node.parent) {
return getSourceTextOfNodeFromSourceFile(sourceFile, node);
}
var escapeText = getEmitFlags(node) & 16777216 ? escapeString : escapeNonAsciiString;
switch (node.kind) {
case 9:
if (node.singleQuote) {
return "'" + escapeText(node.text, 39) + "'";
}
else {
return '"' + escapeText(node.text, 34) + '"';
}
case 13:
return "`" + escapeText(node.text, 96) + "`";
case 14:
return "`" + escapeText(node.text, 96) + "${";
case 15:
return "}" + escapeText(node.text, 96) + "${";
case 16:
return "}" + escapeText(node.text, 96) + "`";
case 8:
case 12:
return node.text;
}
ts.Debug.fail("Literal kind '" + node.kind + "' not accounted for.");
}
ts.getLiteralText = getLiteralText;
function getTextOfConstantValue(value) {
return ts.isString(value) ? '"' + escapeNonAsciiString(value) + '"' : "" + value;
}
ts.getTextOfConstantValue = getTextOfConstantValue;
function escapeLeadingUnderscores(identifier) {
return (identifier.length >= 2 && identifier.charCodeAt(0) === 95 && identifier.charCodeAt(1) === 95 ? "_" + identifier : identifier);
}
ts.escapeLeadingUnderscores = escapeLeadingUnderscores;
function escapeIdentifier(identifier) {
return identifier;
}
ts.escapeIdentifier = escapeIdentifier;
function makeIdentifierFromModuleName(moduleName) {
return ts.getBaseFileName(moduleName).replace(/^(\d)/, "_$1").replace(/\W/g, "_");
}
ts.makeIdentifierFromModuleName = makeIdentifierFromModuleName;
function isBlockOrCatchScoped(declaration) {
return (ts.getCombinedNodeFlags(declaration) & 3) !== 0 ||
isCatchClauseVariableDeclarationOrBindingElement(declaration);
}
ts.isBlockOrCatchScoped = isBlockOrCatchScoped;
function isCatchClauseVariableDeclarationOrBindingElement(declaration) {
var node = getRootDeclaration(declaration);
return node.kind === 226 && node.parent.kind === 260;
}
ts.isCatchClauseVariableDeclarationOrBindingElement = isCatchClauseVariableDeclarationOrBindingElement;
function isAmbientModule(node) {
return node && node.kind === 233 &&
(node.name.kind === 9 || isGlobalScopeAugmentation(node));
}
ts.isAmbientModule = isAmbientModule;
function isModuleWithStringLiteralName(node) {
return ts.isModuleDeclaration(node) && node.name.kind === 9;
}
ts.isModuleWithStringLiteralName = isModuleWithStringLiteralName;
function isNonGlobalAmbientModule(node) {
return ts.isModuleDeclaration(node) && ts.isStringLiteral(node.name);
}
ts.isNonGlobalAmbientModule = isNonGlobalAmbientModule;
function isShorthandAmbientModuleSymbol(moduleSymbol) {
return isShorthandAmbientModule(moduleSymbol.valueDeclaration);
}
ts.isShorthandAmbientModuleSymbol = isShorthandAmbientModuleSymbol;
function isShorthandAmbientModule(node) {
return node && node.kind === 233 && (!node.body);
}
function isBlockScopedContainerTopLevel(node) {
return node.kind === 265 ||
node.kind === 233 ||
ts.isFunctionLike(node);
}
ts.isBlockScopedContainerTopLevel = isBlockScopedContainerTopLevel;
function isGlobalScopeAugmentation(module) {
return !!(module.flags & 512);
}
ts.isGlobalScopeAugmentation = isGlobalScopeAugmentation;
function isExternalModuleAugmentation(node) {
if (!node || !isAmbientModule(node)) {
return false;
}
switch (node.parent.kind) {
case 265:
return ts.isExternalModule(node.parent);
case 234:
return isAmbientModule(node.parent.parent) && !ts.isExternalModule(node.parent.parent.parent);
}
return false;
}
ts.isExternalModuleAugmentation = isExternalModuleAugmentation;
function isEffectiveExternalModule(node, compilerOptions) {
return ts.isExternalModule(node) || compilerOptions.isolatedModules;
}
ts.isEffectiveExternalModule = isEffectiveExternalModule;
function isBlockScope(node, parentNode) {
switch (node.kind) {
case 265:
case 235:
case 260:
case 233:
case 214:
case 215:
case 216:
case 152:
case 151:
case 153:
case 154:
case 228:
case 186:
case 187:
return true;
case 207:
return parentNode && !ts.isFunctionLike(parentNode);
}
return false;
}
ts.isBlockScope = isBlockScope;
function isDeclarationWithTypeParameters(node) {
switch (node.kind) {
case 155:
case 156:
case 150:
case 157:
case 160:
case 161:
case 273:
case 229:
case 199:
case 230:
case 231:
case 282:
case 228:
case 151:
case 152:
case 153:
case 154:
case 186:
case 187:
return true;
default:
ts.assertTypeIsNever(node);
return false;
}
}
ts.isDeclarationWithTypeParameters = isDeclarationWithTypeParameters;
function isAnyImportSyntax(node) {
switch (node.kind) {
case 238:
case 237:
return true;
default:
return false;
}
}
ts.isAnyImportSyntax = isAnyImportSyntax;
function getEnclosingBlockScopeContainer(node) {
var current = node.parent;
while (current) {
if (isBlockScope(current, current.parent)) {
return current;
}
current = current.parent;
}
}
ts.getEnclosingBlockScopeContainer = getEnclosingBlockScopeContainer;
function declarationNameToString(name) {
return getFullWidth(name) === 0 ? "(Missing)" : getTextOfNode(name);
}
ts.declarationNameToString = declarationNameToString;
function getNameFromIndexInfo(info) {
return info.declaration ? declarationNameToString(info.declaration.parameters[0].name) : undefined;
}
ts.getNameFromIndexInfo = getNameFromIndexInfo;
function getTextOfPropertyName(name) {
switch (name.kind) {
case 71:
return name.escapedText;
case 9:
case 8:
return escapeLeadingUnderscores(name.text);
case 144:
if (isStringOrNumericLiteral(name.expression)) {
return escapeLeadingUnderscores(name.expression.text);
}
}
return undefined;
}
ts.getTextOfPropertyName = getTextOfPropertyName;
function entityNameToString(name) {
switch (name.kind) {
case 71:
return getFullWidth(name) === 0 ? ts.idText(name) : getTextOfNode(name);
case 143:
return entityNameToString(name.left) + "." + entityNameToString(name.right);
case 179:
return entityNameToString(name.expression) + "." + entityNameToString(name.name);
}
}
ts.entityNameToString = entityNameToString;
function createDiagnosticForNode(node, message, arg0, arg1, arg2) {
var sourceFile = getSourceFileOfNode(node);
return createDiagnosticForNodeInSourceFile(sourceFile, node, message, arg0, arg1, arg2);
}
ts.createDiagnosticForNode = createDiagnosticForNode;
function createDiagnosticForNodeInSourceFile(sourceFile, node, message, arg0, arg1, arg2) {
var span = getErrorSpanForNode(sourceFile, node);
return ts.createFileDiagnostic(sourceFile, span.start, span.length, message, arg0, arg1, arg2);
}
ts.createDiagnosticForNodeInSourceFile = createDiagnosticForNodeInSourceFile;
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 === 207) {
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 265:
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 226:
case 176:
case 229:
case 199:
case 230:
case 233:
case 232:
case 264:
case 228:
case 186:
case 151:
case 153:
case 154:
case 231:
errorNode = node.name;
break;
case 187:
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 isConstEnumDeclaration(node) {
return node.kind === 232 && isConst(node);
}
ts.isConstEnumDeclaration = isConstEnumDeclaration;
function isConst(node) {
return !!(ts.getCombinedNodeFlags(node) & 2)
|| !!(ts.getCombinedModifierFlags(node) & 2048);
}
ts.isConst = isConst;
function isLet(node) {
return !!(ts.getCombinedNodeFlags(node) & 1);
}
ts.isLet = isLet;
function isSuperCall(n) {
return n.kind === 181 && n.expression.kind === 97;
}
ts.isSuperCall = isSuperCall;
function isImportCall(n) {
return n.kind === 181 && n.expression.kind === 91;
}
ts.isImportCall = isImportCall;
function isPrologueDirective(node) {
return node.kind === 210
&& node.expression.kind === 9;
}
ts.isPrologueDirective = isPrologueDirective;
function getLeadingCommentRangesOfNode(node, sourceFileOfNode) {
return node.kind !== 10 ? ts.getLeadingCommentRanges(sourceFileOfNode.text, node.pos) : undefined;
}
ts.getLeadingCommentRangesOfNode = getLeadingCommentRangesOfNode;
function getJSDocCommentRanges(node, text) {
var commentRanges = (node.kind === 146 ||
node.kind === 145 ||
node.kind === 186 ||
node.kind === 187 ||
node.kind === 185) ?
ts.concatenate(ts.getTrailingCommentRanges(text, node.pos), ts.getLeadingCommentRanges(text, node.pos)) :
ts.getLeadingCommentRanges(text, node.pos);
return ts.filter(commentRanges, function (comment) {
return text.charCodeAt(comment.pos + 1) === 42 &&
text.charCodeAt(comment.pos + 2) === 42 &&
text.charCodeAt(comment.pos + 3) !== 47;
});
}
ts.getJSDocCommentRanges = getJSDocCommentRanges;
ts.fullTripleSlashReferencePathRegEx = /^(\/\/\/\s*<reference\s+path\s*=\s*)('|")(.+?)\2.*?\/>/;
var fullTripleSlashReferenceTypeReferenceDirectiveRegEx = /^(\/\/\/\s*<reference\s+types\s*=\s*)('|")(.+?)\2.*?\/>/;
ts.fullTripleSlashAMDReferencePathRegEx = /^(\/\/\/\s*<amd-dependency\s+path\s*=\s*)('|")(.+?)\2.*?\/>/;
var defaultLibReferenceRegEx = /^(\/\/\/\s*<reference\s+no-default-lib\s*=\s*)('|")(.+?)\2\s*\/>/;
function isPartOfTypeNode(node) {
if (158 <= node.kind && node.kind <= 173) {
return true;
}
switch (node.kind) {
case 119:
case 133:
case 136:
case 122:
case 137:
case 139:
case 130:
return true;
case 105:
return node.parent.kind !== 190;
case 201:
return !isExpressionWithTypeArgumentsInClassExtendsClause(node);
case 71:
if (node.parent.kind === 143 && node.parent.right === node) {
node = node.parent;
}
else if (node.parent.kind === 179 && node.parent.name === node) {
node = node.parent;
}
ts.Debug.assert(node.kind === 71 || node.kind === 143 || node.kind === 179, "'node' was expected to be a qualified name, identifier or property access in 'isPartOfTypeNode'.");
case 143:
case 179:
case 99:
var parent = node.parent;
if (parent.kind === 162) {
return false;
}
if (158 <= parent.kind && parent.kind <= 173) {
return true;
}
switch (parent.kind) {
case 201:
return !isExpressionWithTypeArgumentsInClassExtendsClause(parent);
case 145:
return node === parent.constraint;
case 149:
case 148:
case 146:
case 226:
return node === parent.type;
case 228:
case 186:
case 187:
case 152:
case 151:
case 150:
case 153:
case 154:
return node === parent.type;
case 155:
case 156:
case 157:
return node === parent.type;
case 184:
return node === parent.type;
case 181:
case 182:
return parent.typeArguments && ts.indexOf(parent.typeArguments, node) >= 0;
case 183:
return false;
}
}
return false;
}
ts.isPartOfTypeNode = isPartOfTypeNode;
function isChildOfNodeWithKind(node, kind) {
while (node) {
if (node.kind === kind) {
return true;
}
node = node.parent;
}
return false;
}
ts.isChildOfNodeWithKind = isChildOfNodeWithKind;
function forEachReturnStatement(body, visitor) {
return traverse(body);
function traverse(node) {
switch (node.kind) {
case 219:
return visitor(node);
case 235:
case 207:
case 211:
case 212:
case 213:
case 214:
case 215:
case 216:
case 220:
case 221:
case 257:
case 258:
case 222:
case 224:
case 260:
return ts.forEachChild(node, traverse);
}
}
}
ts.forEachReturnStatement = forEachReturnStatement;
function forEachYieldExpression(body, visitor) {
return traverse(body);
function traverse(node) {
switch (node.kind) {
case 197:
visitor(node);
var operand = node.expression;
if (operand) {
traverse(operand);
}
return;
case 232:
case 230:
case 233:
case 231:
case 229:
case 199:
return;
default:
if (ts.isFunctionLike(node)) {
var name = node.name;
if (name && name.kind === 144) {
traverse(name.expression);
return;
}
}
else if (!isPartOfTypeNode(node)) {
ts.forEachChild(node, traverse);
}
}
}
}
ts.forEachYieldExpression = forEachYieldExpression;
function getRestParameterElementType(node) {
if (node && node.kind === 164) {
return node.elementType;
}
else if (node && node.kind === 159) {
return ts.singleOrUndefined(node.typeArguments);
}
else {
return undefined;
}
}
ts.getRestParameterElementType = getRestParameterElementType;
function isVariableLike(node) {
if (node) {
switch (node.kind) {
case 176:
case 264:
case 146:
case 261:
case 149:
case 148:
case 262:
case 226:
return true;
}
}
return false;
}
ts.isVariableLike = isVariableLike;
function introducesArgumentsExoticObject(node) {
switch (node.kind) {
case 151:
case 150:
case 152:
case 153:
case 154:
case 228:
case 186:
return true;
}
return false;
}
ts.introducesArgumentsExoticObject = introducesArgumentsExoticObject;
function unwrapInnermostStatementOfLabel(node, beforeUnwrapLabelCallback) {
while (true) {
if (beforeUnwrapLabelCallback) {
beforeUnwrapLabelCallback(node);
}
if (node.statement.kind !== 222) {
return node.statement;
}
node = node.statement;
}
}
ts.unwrapInnermostStatementOfLabel = unwrapInnermostStatementOfLabel;
function isFunctionBlock(node) {
return node && node.kind === 207 && ts.isFunctionLike(node.parent);
}
ts.isFunctionBlock = isFunctionBlock;
function isObjectLiteralMethod(node) {
return node && node.kind === 151 && node.parent.kind === 178;
}
ts.isObjectLiteralMethod = isObjectLiteralMethod;
function isObjectLiteralOrClassExpressionMethod(node) {
return node.kind === 151 &&
(node.parent.kind === 178 ||
node.parent.kind === 199);
}
ts.isObjectLiteralOrClassExpressionMethod = isObjectLiteralOrClassExpressionMethod;
function isIdentifierTypePredicate(predicate) {
return predicate && predicate.kind === 1;
}
ts.isIdentifierTypePredicate = isIdentifierTypePredicate;
function isThisTypePredicate(predicate) {
return predicate && predicate.kind === 0;
}
ts.isThisTypePredicate = isThisTypePredicate;
function getPropertyAssignment(objectLiteral, key, key2) {
return ts.filter(objectLiteral.properties, function (property) {
if (property.kind === 261) {
var propName = getTextOfPropertyName(property.name);
return key === propName || (key2 && key2 === propName);
}
});
}
ts.getPropertyAssignment = getPropertyAssignment;
function getContainingFunction(node) {
return ts.findAncestor(node.parent, ts.isFunctionLike);
}
ts.getContainingFunction = getContainingFunction;
function getContainingClass(node) {
return ts.findAncestor(node.parent, ts.isClassLike);
}
ts.getContainingClass = getContainingClass;
function getThisContainer(node, includeArrowFunctions) {
while (true) {
node = node.parent;
if (!node) {
return undefined;
}
switch (node.kind) {
case 144:
if (ts.isClassLike(node.parent.parent)) {
return node;
}
node = node.parent;
break;
case 147:
if (node.parent.kind === 146 && ts.isClassElement(node.parent.parent)) {
node = node.parent.parent;
}
else if (ts.isClassElement(node.parent)) {
node = node.parent;
}
break;
case 187:
if (!includeArrowFunctions) {
continue;
}
case 228:
case 186:
case 233:
case 149:
case 148:
case 151:
case 150:
case 152:
case 153:
case 154:
case 155:
case 156:
case 157:
case 232:
case 265:
return node;
}
}
}
ts.getThisContainer = getThisContainer;
function getNewTargetContainer(node) {
var container = getThisContainer(node, false);
if (container) {
switch (container.kind) {
case 152:
case 228:
case 186:
return container;
}
}
return undefined;
}
ts.getNewTargetContainer = getNewTargetContainer;
function getSuperContainer(node, stopOnFunctions) {
while (true) {
node = node.parent;
if (!node) {
return node;
}
switch (node.kind) {
case 144:
node = node.parent;
break;
case 228:
case 186:
case 187:
if (!stopOnFunctions) {
continue;
}
case 149:
case 148:
case 151:
case 150:
case 152:
case 153:
case 154:
return node;
case 147:
if (node.parent.kind === 146 && ts.isClassElement(node.parent.parent)) {
node = node.parent.parent;
}
else if (ts.isClassElement(node.parent)) {
node = node.parent;
}
break;
}
}
}
ts.getSuperContainer = getSuperContainer;
function getImmediatelyInvokedFunctionExpression(func) {
if (func.kind === 186 || func.kind === 187) {
var prev = func;
var parent = func.parent;
while (parent.kind === 185) {
prev = parent;
parent = parent.parent;
}
if (parent.kind === 181 && parent.expression === prev) {
return parent;
}
}
}
ts.getImmediatelyInvokedFunctionExpression = getImmediatelyInvokedFunctionExpression;
function isSuperProperty(node) {
var kind = node.kind;
return (kind === 179 || kind === 180)
&& node.expression.kind === 97;
}
ts.isSuperProperty = isSuperProperty;
function getEntityNameFromTypeNode(node) {
switch (node.kind) {
case 159:
return node.typeName;
case 201:
return isEntityNameExpression(node.expression)
? node.expression
: undefined;
case 71:
case 143:
return node;
}
return undefined;
}
ts.getEntityNameFromTypeNode = getEntityNameFromTypeNode;
function getInvokedExpression(node) {
if (node.kind === 183) {
return node.tag;
}
else if (ts.isJsxOpeningLikeElement(node)) {
return node.tagName;
}
return node.expression;
}
ts.getInvokedExpression = getInvokedExpression;
function nodeCanBeDecorated(node) {
switch (node.kind) {
case 229:
return true;
case 149:
return node.parent.kind === 229;
case 153:
case 154:
case 151:
return node.body !== undefined
&& node.parent.kind === 229;
case 146:
return node.parent.body !== undefined
&& (node.parent.kind === 152
|| node.parent.kind === 151
|| node.parent.kind === 154)
&& node.parent.parent.kind === 229;
}
return false;
}
ts.nodeCanBeDecorated = nodeCanBeDecorated;
function nodeIsDecorated(node) {
return node.decorators !== undefined
&& nodeCanBeDecorated(node);
}
ts.nodeIsDecorated = nodeIsDecorated;
function nodeOrChildIsDecorated(node) {
return nodeIsDecorated(node) || childIsDecorated(node);
}
ts.nodeOrChildIsDecorated = nodeOrChildIsDecorated;
function childIsDecorated(node) {
switch (node.kind) {
case 229:
return ts.forEach(node.members, nodeOrChildIsDecorated);
case 151:
case 154:
return ts.forEach(node.parameters, nodeIsDecorated);
}
}
ts.childIsDecorated = childIsDecorated;
function isJSXTagName(node) {
var parent = node.parent;
if (parent.kind === 251 ||
parent.kind === 250 ||
parent.kind === 252) {
return parent.tagName === node;
}
return false;
}
ts.isJSXTagName = isJSXTagName;
function isPartOfExpression(node) {
switch (node.kind) {
case 97:
case 95:
case 101:
case 86:
case 12:
case 177:
case 178:
case 179:
case 180:
case 181:
case 182:
case 183:
case 202:
case 184:
case 203:
case 185:
case 186:
case 199:
case 187:
case 190:
case 188:
case 189:
case 192:
case 193:
case 194:
case 195:
case 198:
case 196:
case 13:
case 200:
case 249:
case 250:
case 197:
case 191:
case 204:
return true;
case 143:
while (node.parent.kind === 143) {
node = node.parent;
}
return node.parent.kind === 162 || isJSXTagName(node);
case 71:
if (node.parent.kind === 162 || isJSXTagName(node)) {
return true;
}
case 8:
case 9:
case 99:
return isInExpressionContext(node);
default:
return false;
}
}
ts.isPartOfExpression = isPartOfExpression;
function isInExpressionContext(node) {
var parent = node.parent;
switch (parent.kind) {
case 226:
case 146:
case 149:
case 148:
case 264:
case 261:
case 176:
return parent.initializer === node;
case 210:
case 211:
case 212:
case 213:
case 219:
case 220:
case 221:
case 257:
case 223:
return parent.expression === node;
case 214:
var forStatement = parent;
return (forStatement.initializer === node && forStatement.initializer.kind !== 227) ||
forStatement.condition === node ||
forStatement.incrementor === node;
case 215:
case 216:
var forInStatement = parent;
return (forInStatement.initializer === node && forInStatement.initializer.kind !== 227) ||
forInStatement.expression === node;
case 184:
case 202:
return node === parent.expression;
case 205:
return node === parent.expression;
case 144:
return node === parent.expression;
case 147:
case 256:
case 255:
case 263:
return true;
case 201:
return parent.expression === node && isExpressionWithTypeArgumentsInClassExtendsClause(parent);
default:
return isPartOfExpression(parent);
}
}
ts.isInExpressionContext = isInExpressionContext;
function isExternalModuleImportEqualsDeclaration(node) {
return node.kind === 237 && node.moduleReference.kind === 248;
}
ts.isExternalModuleImportEqualsDeclaration = isExternalModuleImportEqualsDeclaration;
function getExternalModuleImportEqualsDeclarationExpression(node) {
ts.Debug.assert(isExternalModuleImportEqualsDeclaration(node));
return node.moduleReference.expression;
}
ts.getExternalModuleImportEqualsDeclarationExpression = getExternalModuleImportEqualsDeclarationExpression;
function isInternalModuleImportEqualsDeclaration(node) {
return node.kind === 237 && node.moduleReference.kind !== 248;
}
ts.isInternalModuleImportEqualsDeclaration = isInternalModuleImportEqualsDeclaration;
function isSourceFileJavaScript(file) {
return isInJavaScriptFile(file);
}
ts.isSourceFileJavaScript = isSourceFileJavaScript;
function isInJavaScriptFile(node) {
return node && !!(node.flags & 65536);
}
ts.isInJavaScriptFile = isInJavaScriptFile;
function isInJSDoc(node) {
return node && !!(node.flags & 1048576);
}
ts.isInJSDoc = isInJSDoc;
function isJSDocIndexSignature(node) {
return ts.isTypeReferenceNode(node) &&
ts.isIdentifier(node.typeName) &&
node.typeName.escapedText === "Object" &&
node.typeArguments && node.typeArguments.length === 2 &&
(node.typeArguments[0].kind === 136 || node.typeArguments[0].kind === 133);
}
ts.isJSDocIndexSignature = isJSDocIndexSignature;
function isRequireCall(callExpression, checkArgumentIsStringLiteral) {
if (callExpression.kind !== 181) {
return false;
}
var _a = callExpression, expression = _a.expression, args = _a.arguments;
if (expression.kind !== 71 || expression.escapedText !== "require") {
return false;
}
if (args.length !== 1) {
return false;
}
var arg = args[0];
return !checkArgumentIsStringLiteral || arg.kind === 9 || arg.kind === 13;
}
ts.isRequireCall = isRequireCall;
function isSingleOrDoubleQuote(charCode) {
return charCode === 39 || charCode === 34;
}
ts.isSingleOrDoubleQuote = isSingleOrDoubleQuote;
function isStringDoubleQuoted(string, sourceFile) {
return getSourceTextOfNodeFromSourceFile(sourceFile, string).charCodeAt(0) === 34;
}
ts.isStringDoubleQuoted = isStringDoubleQuoted;
function isDeclarationOfFunctionOrClassExpression(s) {
if (s.valueDeclaration && s.valueDeclaration.kind === 226) {
var declaration = s.valueDeclaration;
return declaration.initializer && (declaration.initializer.kind === 186 || declaration.initializer.kind === 199);
}
return false;
}
ts.isDeclarationOfFunctionOrClassExpression = isDeclarationOfFunctionOrClassExpression;
function getRightMostAssignedExpression(node) {
while (isAssignmentExpression(node, true)) {
node = node.right;
}
return node;
}
ts.getRightMostAssignedExpression = getRightMostAssignedExpression;
function isExportsIdentifier(node) {
return ts.isIdentifier(node) && node.escapedText === "exports";
}
ts.isExportsIdentifier = isExportsIdentifier;
function isModuleExportsPropertyAccessExpression(node) {
return ts.isPropertyAccessExpression(node) && ts.isIdentifier(node.expression) && node.expression.escapedText === "module" && node.name.escapedText === "exports";
}
ts.isModuleExportsPropertyAccessExpression = isModuleExportsPropertyAccessExpression;
function getSpecialPropertyAssignmentKind(expr) {
if (!isInJavaScriptFile(expr)) {
return 0;
}
if (expr.operatorToken.kind !== 58 || expr.left.kind !== 179) {
return 0;
}
var lhs = expr.left;
if (lhs.expression.kind === 71) {
var lhsId = lhs.expression;
if (lhsId.escapedText === "exports") {
return 1;
}
else if (lhsId.escapedText === "module" && lhs.name.escapedText === "exports") {
return 2;
}
else {
return 5;
}
}
else if (lhs.expression.kind === 99) {
return 4;
}
else if (lhs.expression.kind === 179) {
var innerPropertyAccess = lhs.expression;
if (innerPropertyAccess.expression.kind === 71) {
var innerPropertyAccessIdentifier = innerPropertyAccess.expression;
if (innerPropertyAccessIdentifier.escapedText === "module" && innerPropertyAccess.name.escapedText === "exports") {
return 1;
}
if (innerPropertyAccess.name.escapedText === "prototype") {
return 3;
}
}
}
return 0;
}
ts.getSpecialPropertyAssignmentKind = getSpecialPropertyAssignmentKind;
function getExternalModuleName(node) {
if (node.kind === 238) {
return node.moduleSpecifier;
}
if (node.kind === 237) {
var reference = node.moduleReference;
if (reference.kind === 248) {
return reference.expression;
}
}
if (node.kind === 244) {
return node.moduleSpecifier;
}
if (isModuleWithStringLiteralName(node)) {
return node.name;
}
}
ts.getExternalModuleName = getExternalModuleName;
function getNamespaceDeclarationNode(node) {
if (node.kind === 237) {
return node;
}
var importClause = node.importClause;
if (importClause && importClause.namedBindings && importClause.namedBindings.kind === 240) {
return importClause.namedBindings;
}
}
ts.getNamespaceDeclarationNode = getNamespaceDeclarationNode;
function isDefaultImport(node) {
return node.kind === 238
&& node.importClause
&& !!node.importClause.name;
}
ts.isDefaultImport = isDefaultImport;
function hasQuestionToken(node) {
if (node) {
switch (node.kind) {
case 146:
case 151:
case 150:
case 262:
case 261:
case 149:
case 148:
return node.questionToken !== undefined;
}
}
return false;
}
ts.hasQuestionToken = hasQuestionToken;
function isJSDocConstructSignature(node) {
return node.kind === 273 &&
node.parameters.length > 0 &&
node.parameters[0].name &&
node.parameters[0].name.escapedText === "new";
}
ts.isJSDocConstructSignature = isJSDocConstructSignature;
function getAllJSDocs(node) {
if (ts.isJSDocTypedefTag(node)) {
return [node.parent];
}
return getJSDocCommentsAndTags(node);
}
ts.getAllJSDocs = getAllJSDocs;
function getJSDocCommentsAndTags(node) {
var result;
getJSDocCommentsAndTagsWorker(node);
return result || ts.emptyArray;
function getJSDocCommentsAndTagsWorker(node) {
var parent = node.parent;
var isInitializerOfVariableDeclarationInStatement = isVariableLike(parent) &&
parent.initializer === node &&
parent.parent.parent.kind === 208;
var isVariableOfVariableDeclarationStatement = isVariableLike(node) &&
parent.parent.kind === 208;
var variableStatementNode = isInitializerOfVariableDeclarationInStatement ? parent.parent.parent :
isVariableOfVariableDeclarationStatement ? parent.parent :
undefined;
if (variableStatementNode) {
getJSDocCommentsAndTagsWorker(variableStatementNode);
}
var isSourceOfAssignmentExpressionStatement = parent && parent.parent &&
parent.kind === 194 &&
parent.operatorToken.kind === 58 &&
parent.parent.kind === 210;
if (isSourceOfAssignmentExpressionStatement) {
getJSDocCommentsAndTagsWorker(parent.parent);
}
var isModuleDeclaration = node.kind === 233 &&
parent && parent.kind === 233;
var isPropertyAssignmentExpression = parent && parent.kind === 261;
if (isModuleDeclaration || isPropertyAssignmentExpression) {
getJSDocCommentsAndTagsWorker(parent);
}
if (node.kind === 146) {
result = ts.addRange(result, ts.getJSDocParameterTags(node));
}
if (isVariableLike(node) && node.initializer && ts.hasJSDocNodes(node.initializer)) {
result = ts.addRange(result, node.initializer.jsDoc);
}
if (ts.hasJSDocNodes(node)) {
result = ts.addRange(result, node.jsDoc);
}
}
}
ts.getJSDocCommentsAndTags = getJSDocCommentsAndTags;
function getParameterSymbolFromJSDoc(node) {
if (node.symbol) {
return node.symbol;
}
if (!ts.isIdentifier(node.name)) {
return undefined;
}
var name = node.name.escapedText;
var func = getJSDocHost(node);
if (!ts.isFunctionLike(func)) {
return undefined;
}
var parameter = ts.find(func.parameters, function (p) {
return p.name.kind === 71 && p.name.escapedText === name;
});
return parameter && parameter.symbol;
}
ts.getParameterSymbolFromJSDoc = getParameterSymbolFromJSDoc;
function getJSDocHost(node) {
ts.Debug.assert(node.parent.kind === 275);
return node.parent.parent;
}
ts.getJSDocHost = getJSDocHost;
function getTypeParameterFromJsDoc(node) {
var name = node.name.escapedText;
var typeParameters = node.parent.parent.parent.typeParameters;
return ts.find(typeParameters, function (p) { return p.name.escapedText === name; });
}
ts.getTypeParameterFromJsDoc = getTypeParameterFromJsDoc;
function hasRestParameter(s) {
var last = ts.lastOrUndefined(s.parameters);
return last && isRestParameter(last);
}
ts.hasRestParameter = hasRestParameter;
function isRestParameter(node) {
return node.dotDotDotToken !== undefined;
}
ts.isRestParameter = isRestParameter;
function getAssignmentTargetKind(node) {
var parent = node.parent;
while (true) {
switch (parent.kind) {
case 194:
var binaryOperator = parent.operatorToken.kind;
return isAssignmentOperator(binaryOperator) && parent.left === node ?
binaryOperator === 58 ? 1 : 2 :
0;
case 192:
case 193:
var unaryOperator = parent.operator;
return unaryOperator === 43 || unaryOperator === 44 ? 2 : 0;
case 215:
case 216:
return parent.initializer === node ? 1 : 0;
case 185:
case 177:
case 198:
node = parent;
break;
case 262:
if (parent.name !== node) {
return 0;
}
node = parent.parent;
break;
case 261:
if (parent.name === node) {
return 0;
}
node = parent.parent;
break;
default:
return 0;
}
parent = node.parent;
}
}
ts.getAssignmentTargetKind = getAssignmentTargetKind;
function isAssignmentTarget(node) {
return getAssignmentTargetKind(node) !== 0;
}
ts.isAssignmentTarget = isAssignmentTarget;
function isDeleteTarget(node) {
if (node.kind !== 179 && node.kind !== 180) {
return false;
}
node = node.parent;
while (node && node.kind === 185) {
node = node.parent;
}
return node && node.kind === 188;
}
ts.isDeleteTarget = isDeleteTarget;
function isNodeDescendantOf(node, ancestor) {
while (node) {
if (node === ancestor)
return true;
node = node.parent;
}
return false;
}
ts.isNodeDescendantOf = isNodeDescendantOf;
function isInAmbientContext(node) {
while (node) {
if (hasModifier(node, 2) || (node.kind === 265 && node.isDeclarationFile)) {
return true;
}
node = node.parent;
}
return false;
}
ts.isInAmbientContext = isInAmbientContext;
function isDeclarationName(name) {
switch (name.kind) {
case 71:
case 9:
case 8:
return ts.isDeclaration(name.parent) && name.parent.name === name;
default:
return false;
}
}
ts.isDeclarationName = isDeclarationName;
function isAnyDeclarationName(name) {
switch (name.kind) {
case 71:
case 9:
case 8:
if (ts.isDeclaration(name.parent)) {
return name.parent.name === name;
}
var binExp = name.parent.parent;
return ts.isBinaryExpression(binExp) && getSpecialPropertyAssignmentKind(binExp) !== 0 && ts.getNameOfDeclaration(binExp) === name;
default:
return false;
}
}
ts.isAnyDeclarationName = isAnyDeclarationName;
function isLiteralComputedPropertyDeclarationName(node) {
return (node.kind === 9 || node.kind === 8) &&
node.parent.kind === 144 &&
ts.isDeclaration(node.parent.parent);
}
ts.isLiteralComputedPropertyDeclarationName = isLiteralComputedPropertyDeclarationName;
function isIdentifierName(node) {
var parent = node.parent;
switch (parent.kind) {
case 149:
case 148:
case 151:
case 150:
case 153:
case 154:
case 264:
case 261:
case 179:
return parent.name === node;
case 143:
if (parent.right === node) {
while (parent.kind === 143) {
parent = parent.parent;
}
return parent.kind === 162;
}
return false;
case 176:
case 242:
return parent.propertyName === node;
case 246:
case 253:
return true;
}
return false;
}
ts.isIdentifierName = isIdentifierName;
function isAliasSymbolDeclaration(node) {
return node.kind === 237 ||
node.kind === 236 ||
node.kind === 239 && !!node.name ||
node.kind === 240 ||
node.kind === 242 ||
node.kind === 246 ||
node.kind === 243 && exportAssignmentIsAlias(node);
}
ts.isAliasSymbolDeclaration = isAliasSymbolDeclaration;
function exportAssignmentIsAlias(node) {
return isEntityNameExpression(node.expression);
}
ts.exportAssignmentIsAlias = exportAssignmentIsAlias;
function getClassExtendsHeritageClauseElement(node) {
var heritageClause = getHeritageClause(node.heritageClauses, 85);
return heritageClause && heritageClause.types.length > 0 ? heritageClause.types[0] : undefined;
}
ts.getClassExtendsHeritageClauseElement = getClassExtendsHeritageClauseElement;
function getClassImplementsHeritageClauseElements(node) {
var heritageClause = getHeritageClause(node.heritageClauses, 108);
return heritageClause ? heritageClause.types : undefined;
}
ts.getClassImplementsHeritageClauseElements = getClassImplementsHeritageClauseElements;
function getInterfaceBaseTypeNodes(node) {
var heritageClause = getHeritageClause(node.heritageClauses, 85);
return heritageClause ? heritageClause.types : undefined;
}
ts.getInterfaceBaseTypeNodes = getInterfaceBaseTypeNodes;
function getHeritageClause(clauses, kind) {
if (clauses) {
for (var _i = 0, clauses_1 = clauses; _i < clauses_1.length; _i++) {
var clause = clauses_1[_i];
if (clause.token === kind) {
return clause;
}
}
}
return undefined;
}
ts.getHeritageClause = getHeritageClause;
function tryResolveScriptReference(host, sourceFile, reference) {
if (!host.getCompilerOptions().noResolve) {
var referenceFileName = ts.isRootedDiskPath(reference.fileName) ? reference.fileName : ts.combinePaths(ts.getDirectoryPath(sourceFile.fileName), reference.fileName);
return host.getSourceFile(referenceFileName);
}
}
ts.tryResolveScriptReference = tryResolveScriptReference;
function getAncestor(node, kind) {
while (node) {
if (node.kind === kind) {
return node;
}
node = node.parent;
}
return undefined;
}
ts.getAncestor = getAncestor;
function getFileReferenceFromReferencePath(comment, commentRange) {
var simpleReferenceRegEx = /^\/\/\/\s*<reference\s+/gim;
var isNoDefaultLibRegEx = new RegExp(defaultLibReferenceRegEx.source, "gim");
if (simpleReferenceRegEx.test(comment)) {
if (isNoDefaultLibRegEx.test(comment)) {
return { isNoDefaultLib: true };
}
else {
var refMatchResult = ts.fullTripleSlashReferencePathRegEx.exec(comment);
var refLibResult = !refMatchResult && fullTripleSlashReferenceTypeReferenceDirectiveRegEx.exec(comment);
var match = refMatchResult || refLibResult;
if (match) {
var pos = commentRange.pos + match[1].length + match[2].length;
return {
fileReference: {
pos: pos,
end: pos + match[3].length,
fileName: match[3]
},
isNoDefaultLib: false,
isTypeReferenceDirective: !!refLibResult
};
}
return {
diagnosticMessage: ts.Diagnostics.Invalid_reference_directive_syntax,
isNoDefaultLib: false
};
}
}
return undefined;
}
ts.getFileReferenceFromReferencePath = getFileReferenceFromReferencePath;
function isKeyword(token) {
return 72 <= token && token <= 142;
}
ts.isKeyword = isKeyword;
function isTrivia(token) {
return 2 <= token && token <= 7;
}
ts.isTrivia = isTrivia;
function getFunctionFlags(node) {
if (!node) {
return 4;
}
var flags = 0;
switch (node.kind) {
case 228:
case 186:
case 151:
if (node.asteriskToken) {
flags |= 1;
}
case 187:
if (hasModifier(node, 256)) {
flags |= 2;
}
break;
}
if (!node.body) {
flags |= 4;
}
return flags;
}
ts.getFunctionFlags = getFunctionFlags;
function isAsyncFunction(node) {
switch (node.kind) {
case 228:
case 186:
case 187:
case 151:
return node.body !== undefined
&& node.asteriskToken === undefined
&& hasModifier(node, 256);
}
return false;
}
ts.isAsyncFunction = isAsyncFunction;
function isStringOrNumericLiteral(node) {
var kind = node.kind;
return kind === 9
|| kind === 8;
}
ts.isStringOrNumericLiteral = isStringOrNumericLiteral;
function hasDynamicName(declaration) {
var name = ts.getNameOfDeclaration(declaration);
return name && isDynamicName(name);
}
ts.hasDynamicName = hasDynamicName;
function isDynamicName(name) {
return name.kind === 144 &&
!isStringOrNumericLiteral(name.expression) &&
!isWellKnownSymbolSyntactically(name.expression);
}
ts.isDynamicName = isDynamicName;
function isWellKnownSymbolSyntactically(node) {
return ts.isPropertyAccessExpression(node) && isESSymbolIdentifier(node.expression);
}
ts.isWellKnownSymbolSyntactically = isWellKnownSymbolSyntactically;
function getPropertyNameForPropertyNameNode(name) {
if (name.kind === 71) {
return name.escapedText;
}
if (name.kind === 9 || name.kind === 8) {
return escapeLeadingUnderscores(name.text);
}
if (name.kind === 144) {
var nameExpression = name.expression;
if (isWellKnownSymbolSyntactically(nameExpression)) {
return getPropertyNameForKnownSymbolName(ts.idText(nameExpression.name));
}
else if (nameExpression.kind === 9 || nameExpression.kind === 8) {
return escapeLeadingUnderscores(nameExpression.text);
}
}
return undefined;
}
ts.getPropertyNameForPropertyNameNode = getPropertyNameForPropertyNameNode;
function getTextOfIdentifierOrLiteral(node) {
if (node) {
if (node.kind === 71) {
return ts.idText(node);
}
if (node.kind === 9 ||
node.kind === 8) {
return node.text;
}
}
return undefined;
}
ts.getTextOfIdentifierOrLiteral = getTextOfIdentifierOrLiteral;
function getEscapedTextOfIdentifierOrLiteral(node) {
if (node) {
if (node.kind === 71) {
return node.escapedText;
}
if (node.kind === 9 ||
node.kind === 8) {
return escapeLeadingUnderscores(node.text);
}
}
return undefined;
}
ts.getEscapedTextOfIdentifierOrLiteral = getEscapedTextOfIdentifierOrLiteral;
function getPropertyNameForKnownSymbolName(symbolName) {
return "__@" + symbolName;
}
ts.getPropertyNameForKnownSymbolName = getPropertyNameForKnownSymbolName;
function isESSymbolIdentifier(node) {
return node.kind === 71 && node.escapedText === "Symbol";
}
ts.isESSymbolIdentifier = isESSymbolIdentifier;
function isPushOrUnshiftIdentifier(node) {
return node.escapedText === "push" || node.escapedText === "unshift";
}
ts.isPushOrUnshiftIdentifier = isPushOrUnshiftIdentifier;
function isParameterDeclaration(node) {
var root = getRootDeclaration(node);
return root.kind === 146;
}
ts.isParameterDeclaration = isParameterDeclaration;
function getRootDeclaration(node) {
while (node.kind === 176) {
node = node.parent.parent;
}
return node;
}
ts.getRootDeclaration = getRootDeclaration;
function nodeStartsNewLexicalEnvironment(node) {
var kind = node.kind;
return kind === 152
|| kind === 186
|| kind === 228
|| kind === 187
|| kind === 151
|| kind === 153
|| kind === 154
|| kind === 233
|| kind === 265;
}
ts.nodeStartsNewLexicalEnvironment = nodeStartsNewLexicalEnvironment;
function nodeIsSynthesized(range) {
return ts.positionIsSynthesized(range.pos)
|| ts.positionIsSynthesized(range.end);
}
ts.nodeIsSynthesized = nodeIsSynthesized;
function getOriginalSourceFile(sourceFile) {
return ts.getParseTreeNode(sourceFile, ts.isSourceFile) || sourceFile;
}
ts.getOriginalSourceFile = getOriginalSourceFile;
function getExpressionAssociativity(expression) {
var operator = getOperator(expression);
var hasArguments = expression.kind === 182 && expression.arguments !== undefined;
return getOperatorAssociativity(expression.kind, operator, hasArguments);
}
ts.getExpressionAssociativity = getExpressionAssociativity;
function getOperatorAssociativity(kind, operator, hasArguments) {
switch (kind) {
case 182:
return hasArguments ? 0 : 1;
case 192:
case 189:
case 190:
case 188:
case 191:
case 195:
case 197:
return 1;
case 194:
switch (operator) {
case 40:
case 58:
case 59:
case 60:
case 62:
case 61:
case 63:
case 64:
case 65:
case 66:
case 67:
case 68:
case 70:
case 69:
return 1;
}
}
return 0;
}
ts.getOperatorAssociativity = getOperatorAssociativity;
function getExpressionPrecedence(expression) {
var operator = getOperator(expression);
var hasArguments = expression.kind === 182 && expression.arguments !== undefined;
return getOperatorPrecedence(expression.kind, operator, hasArguments);
}
ts.getExpressionPrecedence = getExpressionPrecedence;
function getOperator(expression) {
if (expression.kind === 194) {
return expression.operatorToken.kind;
}
else if (expression.kind === 192 || expression.kind === 193) {
return expression.operator;
}
else {
return expression.kind;
}
}
ts.getOperator = getOperator;
function getOperatorPrecedence(nodeKind, operatorKind, hasArguments) {
switch (nodeKind) {
case 99:
case 97:
case 71:
case 95:
case 101:
case 86:
case 8:
case 9:
case 177:
case 178:
case 186:
case 187:
case 199:
case 249:
case 250:
case 12:
case 13:
case 196:
case 185:
case 200:
return 19;
case 183:
case 179:
case 180:
return 18;
case 182:
return hasArguments ? 18 : 17;
case 181:
return 17;
case 193:
return 16;
case 192:
case 189:
case 190:
case 188:
case 191:
return 15;
case 194:
switch (operatorKind) {
case 51:
case 52:
return 15;
case 40:
case 39:
case 41:
case 42:
return 14;
case 37:
case 38:
return 13;
case 45:
case 46:
case 47:
return 12;
case 27:
case 30:
case 29:
case 31:
case 92:
case 93:
return 11;
case 32:
case 34:
case 33:
case 35:
return 10;
case 48:
return 9;
case 50:
return 8;
case 49:
return 7;
case 53:
return 6;
case 54:
return 5;
case 58:
case 59:
case 60:
case 62:
case 61:
case 63:
case 64:
case 65:
case 66:
case 67:
case 68:
case 70:
case 69:
return 3;
case 26:
return 0;
default:
return -1;
}
case 195:
return 4;
case 197:
return 2;
case 198:
return 1;
case 289:
return 0;
default:
return -1;
}
}
ts.getOperatorPrecedence = getOperatorPrecedence;
function createDiagnosticCollection() {
var nonFileDiagnostics = [];
var fileDiagnostics = ts.createMap();
var diagnosticsModified = false;
var modificationCount = 0;
return {
add: add,
getGlobalDiagnostics: getGlobalDiagnostics,
getDiagnostics: getDiagnostics,
getModificationCount: getModificationCount,
reattachFileDiagnostics: reattachFileDiagnostics
};
function getModificationCount() {
return modificationCount;
}
function reattachFileDiagnostics(newFile) {
ts.forEach(fileDiagnostics.get(newFile.fileName), function (diagnostic) { return diagnostic.file = newFile; });
}
function add(diagnostic) {
var diagnostics;
if (diagnostic.file) {
diagnostics = fileDiagnostics.get(diagnostic.file.fileName);
if (!diagnostics) {
diagnostics = [];
fileDiagnostics.set(diagnostic.file.fileName, diagnostics);
}
}
else {
diagnostics = nonFileDiagnostics;
}
diagnostics.push(diagnostic);
diagnosticsModified = true;
modificationCount++;
}
function getGlobalDiagnostics() {
sortAndDeduplicate();
return nonFileDiagnostics;
}
function getDiagnostics(fileName) {
sortAndDeduplicate();
if (fileName) {
return fileDiagnostics.get(fileName) || [];
}
var allDiagnostics = [];
function pushDiagnostic(d) {
allDiagnostics.push(d);
}
ts.forEach(nonFileDiagnostics, pushDiagnostic);
fileDiagnostics.forEach(function (diagnostics) {
ts.forEach(diagnostics, pushDiagnostic);
});
return ts.sortAndDeduplicateDiagnostics(allDiagnostics);
}
function sortAndDeduplicate() {
if (!diagnosticsModified) {
return;
}
diagnosticsModified = false;
nonFileDiagnostics = ts.sortAndDeduplicateDiagnostics(nonFileDiagnostics);
fileDiagnostics.forEach(function (diagnostics, key) {
fileDiagnostics.set(key, ts.sortAndDeduplicateDiagnostics(diagnostics));
});
}
}
ts.createDiagnosticCollection = createDiagnosticCollection;
var doubleQuoteEscapedCharsRegExp = /[\\\"\u0000-\u001f\t\v\f\b\r\n\u2028\u2029\u0085]/g;
var singleQuoteEscapedCharsRegExp = /[\\\'\u0000-\u001f\t\v\f\b\r\n\u2028\u2029\u0085]/g;
var backtickQuoteEscapedCharsRegExp = /[\\\`\u0000-\u001f\t\v\f\b\r\n\u2028\u2029\u0085]/g;
var escapedCharsMap = ts.createMapFromTemplate({
"\0": "\\0",
"\t": "\\t",
"\v": "\\v",
"\f": "\\f",
"\b": "\\b",
"\r": "\\r",
"\n": "\\n",
"\\": "\\\\",
"\"": "\\\"",
"\'": "\\\'",
"\`": "\\\`",
"\u2028": "\\u2028",
"\u2029": "\\u2029",
"\u0085": "\\u0085"
});
var escapedNullRegExp = /\\0[0-9]/g;
function escapeString(s, quoteChar) {
var escapedCharsRegExp = quoteChar === 96 ? backtickQuoteEscapedCharsRegExp :
quoteChar === 39 ? singleQuoteEscapedCharsRegExp :
doubleQuoteEscapedCharsRegExp;
return s.replace(escapedCharsRegExp, getReplacement).replace(escapedNullRegExp, nullReplacement);
}
ts.escapeString = escapeString;
function nullReplacement(c) {
return "\\x00" + c.charAt(c.length - 1);
}
function getReplacement(c) {
return escapedCharsMap.get(c) || get16BitUnicodeEscapeSequence(c.charCodeAt(0));
}
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 escapeNonAsciiString(s, quoteChar) {
s = escapeString(s, quoteChar);
return nonAsciiCharacters.test(s) ?
s.replace(nonAsciiCharacters, function (c) { return get16BitUnicodeEscapeSequence(c.charCodeAt(0)); }) :
s;
}
ts.escapeNonAsciiString = escapeNonAsciiString;
var indentStrings = ["", " "];
function getIndentString(level) {
if (indentStrings[level] === undefined) {
indentStrings[level] = getIndentString(level - 1) + indentStrings[1];
}
return indentStrings[level];
}
ts.getIndentString = getIndentString;
function getIndentSize() {
return indentStrings[1].length;
}
ts.getIndentSize = getIndentSize;
function createTextWriter(newLine) {
var output;
var indent;
var lineStart;
var lineCount;
var linePos;
function 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; },
isAtStartOfLine: function () { return lineStart; },
reset: reset
};
}
ts.createTextWriter = createTextWriter;
function getResolvedExternalModuleName(host, file) {
return file.moduleName || getExternalModuleNameFromPath(host, file.fileName);
}
ts.getResolvedExternalModuleName = getResolvedExternalModuleName;
function getExternalModuleNameFromDeclaration(host, resolver, declaration) {
var file = resolver.getExternalModuleFileFromDeclaration(declaration);
if (!file || file.isDeclarationFile) {
return undefined;
}
return getResolvedExternalModuleName(host, file);
}
ts.getExternalModuleNameFromDeclaration = getExternalModuleNameFromDeclaration;
function getExternalModuleNameFromPath(host, fileName) {
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;
var path = outputDir
? getSourceFilePathInNewDir(sourceFile, host, outputDir)
: sourceFile.fileName;
return ts.removeFileExtension(path) + ".d.ts";
}
ts.getDeclarationEmitOutputFilePath = getDeclarationEmitOutputFilePath;
function getSourceFilesToEmit(host, targetSourceFile) {
var options = host.getCompilerOptions();
var isSourceFileFromExternalLibrary = function (file) { return host.isSourceFileFromExternalLibrary(file); };
if (options.outFile || options.out) {
var moduleKind = ts.getEmitModuleKind(options);
var moduleEmitEnabled_1 = moduleKind === ts.ModuleKind.AMD || moduleKind === ts.ModuleKind.System;
return ts.filter(host.getSourceFiles(), function (sourceFile) {
return (moduleEmitEnabled_1 || !ts.isExternalModule(sourceFile)) && sourceFileMayBeEmitted(sourceFile, options, isSourceFileFromExternalLibrary);
});
}
else {
var sourceFiles = targetSourceFile === undefined ? host.getSourceFiles() : [targetSourceFile];
return ts.filter(sourceFiles, function (sourceFile) { return sourceFileMayBeEmitted(sourceFile, options, isSourceFileFromExternalLibrary); });
}
}
ts.getSourceFilesToEmit = getSourceFilesToEmit;
function sourceFileMayBeEmitted(sourceFile, options, isSourceFileFromExternalLibrary) {
return !(options.noEmitForJsFiles && isSourceFileJavaScript(sourceFile)) && !sourceFile.isDeclarationFile && !isSourceFileFromExternalLibrary(sourceFile);
}
ts.sourceFileMayBeEmitted = sourceFileMayBeEmitted;
function getSourceFilePathInNewDir(sourceFile, host, newDirPath) {
var sourceFilePath = ts.getNormalizedAbsolutePath(sourceFile.fileName, host.getCurrentDirectory());
var commonSourceDirectory = host.getCommonSourceDirectory();
var isSourceFileInCommonSourceDirectory = host.getCanonicalFileName(sourceFilePath).indexOf(host.getCanonicalFileName(commonSourceDirectory)) === 0;
sourceFilePath = isSourceFileInCommonSourceDirectory ? sourceFilePath.substring(commonSourceDirectory.length) : sourceFilePath;
return ts.combinePaths(newDirPath, sourceFilePath);
}
ts.getSourceFilePathInNewDir = getSourceFilePathInNewDir;
function writeFile(host, diagnostics, fileName, data, writeByteOrderMark, sourceFiles) {
host.writeFile(fileName, data, writeByteOrderMark, function (hostErrorMessage) {
diagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Could_not_write_file_0_Colon_1, fileName, hostErrorMessage));
}, sourceFiles);
}
ts.writeFile = writeFile;
function getLineOfLocalPosition(currentSourceFile, pos) {
return ts.getLineAndCharacterOfPosition(currentSourceFile, pos).line;
}
ts.getLineOfLocalPosition = getLineOfLocalPosition;
function getLineOfLocalPositionFromLineMap(lineMap, pos) {
return ts.computeLineAndCharacterOfPosition(lineMap, pos).line;
}
ts.getLineOfLocalPositionFromLineMap = getLineOfLocalPositionFromLineMap;
function getFirstConstructorWithBody(node) {
return ts.forEach(node.members, function (member) {
if (member.kind === 152 && nodeIsPresent(member.body)) {
return member;
}
});
}
ts.getFirstConstructorWithBody = getFirstConstructorWithBody;
function getSetAccessorValueParameter(accessor) {
if (accessor && accessor.parameters.length > 0) {
var hasThis = accessor.parameters.length === 2 && parameterIsThisKeyword(accessor.parameters[0]);
return accessor.parameters[hasThis ? 1 : 0];
}
}
function getSetAccessorTypeAnnotationNode(accessor) {
var parameter = getSetAccessorValueParameter(accessor);
return parameter && parameter.type;
}
ts.getSetAccessorTypeAnnotationNode = getSetAccessorTypeAnnotationNode;
function getThisParameter(signature) {
if (signature.parameters.length) {
var thisParameter = signature.parameters[0];
if (parameterIsThisKeyword(thisParameter)) {
return thisParameter;
}
}
}
ts.getThisParameter = getThisParameter;
function parameterIsThisKeyword(parameter) {
return isThisIdentifier(parameter.name);
}
ts.parameterIsThisKeyword = parameterIsThisKeyword;
function isThisIdentifier(node) {
return node && node.kind === 71 && identifierIsThisKeyword(node);
}
ts.isThisIdentifier = isThisIdentifier;
function identifierIsThisKeyword(id) {
return id.originalKeywordKind === 99;
}
ts.identifierIsThisKeyword = identifierIsThisKeyword;
function getAllAccessorDeclarations(declarations, accessor) {
var firstAccessor;
var secondAccessor;
var getAccessor;
var setAccessor;
if (hasDynamicName(accessor)) {
firstAccessor = accessor;
if (accessor.kind === 153) {
getAccessor = accessor;
}
else if (accessor.kind === 154) {
setAccessor = accessor;
}
else {
ts.Debug.fail("Accessor has wrong kind");
}
}
else {
ts.forEach(declarations, function (member) {
if ((member.kind === 153 || member.kind === 154)
&& hasModifier(member, 32) === hasModifier(accessor, 32)) {
var memberName = getPropertyNameForPropertyNameNode(member.name);
var accessorName = getPropertyNameForPropertyNameNode(accessor.name);
if (memberName === accessorName) {
if (!firstAccessor) {
firstAccessor = member;
}
else if (!secondAccessor) {
secondAccessor = member;
}
if (member.kind === 153 && !getAccessor) {
getAccessor = member;
}
if (member.kind === 154 && !setAccessor) {
setAccessor = member;
}
}
}
});
}
return {
firstAccessor: firstAccessor,
secondAccessor: secondAccessor,
getAccessor: getAccessor,
setAccessor: setAccessor
};
}
ts.getAllAccessorDeclarations = getAllAccessorDeclarations;
function getEffectiveTypeAnnotationNode(node, checkJSDoc) {
if (node.type) {
return node.type;
}
if (checkJSDoc || isInJavaScriptFile(node)) {
return ts.getJSDocType(node);
}
}
ts.getEffectiveTypeAnnotationNode = getEffectiveTypeAnnotationNode;
function getEffectiveReturnTypeNode(node, checkJSDoc) {
if (node.type) {
return node.type;
}
if (checkJSDoc || isInJavaScriptFile(node)) {
return ts.getJSDocReturnType(node);
}
}
ts.getEffectiveReturnTypeNode = getEffectiveReturnTypeNode;
function getEffectiveTypeParameterDeclarations(node, checkJSDoc) {
if (node.typeParameters) {
return node.typeParameters;
}
if (checkJSDoc || isInJavaScriptFile(node)) {
var templateTag = ts.getJSDocTemplateTag(node);
return templateTag && templateTag.typeParameters;
}
}
ts.getEffectiveTypeParameterDeclarations = getEffectiveTypeParameterDeclarations;
function getEffectiveSetAccessorTypeAnnotationNode(node, checkJSDoc) {
var parameter = getSetAccessorValueParameter(node);
return parameter && getEffectiveTypeAnnotationNode(parameter, checkJSDoc);
}
ts.getEffectiveSetAccessorTypeAnnotationNode = getEffectiveSetAccessorTypeAnnotationNode;
function emitNewLineBeforeLeadingComments(lineMap, writer, node, leadingComments) {
emitNewLineBeforeLeadingCommentsOfPosition(lineMap, writer, node.pos, leadingComments);
}
ts.emitNewLineBeforeLeadingComments = emitNewLineBeforeLeadingComments;
function emitNewLineBeforeLeadingCommentsOfPosition(lineMap, writer, pos, leadingComments) {
if (leadingComments && leadingComments.length && pos !== leadingComments[0].pos &&
getLineOfLocalPositionFromLineMap(lineMap, pos) !== getLineOfLocalPositionFromLineMap(lineMap, leadingComments[0].pos)) {
writer.writeLine();
}
}
ts.emitNewLineBeforeLeadingCommentsOfPosition = emitNewLineBeforeLeadingCommentsOfPosition;
function emitNewLineBeforeLeadingCommentOfPosition(lineMap, writer, pos, commentPos) {
if (pos !== commentPos &&
getLineOfLocalPositionFromLineMap(lineMap, pos) !== getLineOfLocalPositionFromLineMap(lineMap, commentPos)) {
writer.writeLine();
}
}
ts.emitNewLineBeforeLeadingCommentOfPosition = emitNewLineBeforeLeadingCommentOfPosition;
function emitComments(text, lineMap, writer, comments, leadingSeparator, trailingSeparator, newLine, writeComment) {
if (comments && comments.length > 0) {
if (leadingSeparator) {
writer.write(" ");
}
var emitInterveningSeparator = false;
for (var _i = 0, comments_1 = comments; _i < comments_1.length; _i++) {
var comment = comments_1[_i];
if (emitInterveningSeparator) {
writer.write(" ");
emitInterveningSeparator = false;
}
writeComment(text, lineMap, writer, comment.pos, comment.end, newLine);
if (comment.hasTrailingNewLine) {
writer.writeLine();
}
else {
emitInterveningSeparator = true;
}
}
if (emitInterveningSeparator && trailingSeparator) {
writer.write(" ");
}
}
}
ts.emitComments = emitComments;
function emitDetachedComments(text, lineMap, writer, writeComment, node, newLine, removeComments) {
var leadingComments;
var currentDetachedCommentInfo;
if (removeComments) {
if (node.pos === 0) {
leadingComments = ts.filter(ts.getLeadingCommentRanges(text, node.pos), isPinnedCommentLocal);
}
}
else {
leadingComments = ts.getLeadingCommentRanges(text, node.pos);
}
if (leadingComments) {
var detachedComments = [];
var lastComment = void 0;
for (var _i = 0, leadingComments_1 = leadingComments; _i < leadingComments_1.length; _i++) {
var comment = leadingComments_1[_i];
if (lastComment) {
var lastCommentLine = getLineOfLocalPositionFromLineMap(lineMap, lastComment.end);
var commentLine = getLineOfLocalPositionFromLineMap(lineMap, comment.pos);
if (commentLine >= lastCommentLine + 2) {
break;
}
}
detachedComments.push(comment);
lastComment = comment;
}
if (detachedComments.length) {
var lastCommentLine = getLineOfLocalPositionFromLineMap(lineMap, ts.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, false, true, newLine, writeComment);
currentDetachedCommentInfo = { nodePos: node.pos, detachedCommentEndPos: ts.lastOrUndefined(detachedComments).end };
}
}
}
return currentDetachedCommentInfo;
function isPinnedCommentLocal(comment) {
return isPinnedComment(text, comment);
}
}
ts.emitDetachedComments = emitDetachedComments;
function writeCommentRange(text, lineMap, writer, commentPos, commentEnd, newLine) {
if (text.charCodeAt(commentPos + 1) === 42) {
var firstCommentLineAndCharacter = ts.computeLineAndCharacterOfPosition(lineMap, commentPos);
var lineCount = lineMap.length;
var firstCommentLineIndent = void 0;
for (var pos = commentPos, currentLine = firstCommentLineAndCharacter.line; pos < commentEnd; currentLine++) {
var nextLineStart = (currentLine + 1) === lineCount
? text.length + 1
: lineMap[currentLine + 1];
if (pos !== commentPos) {
if (firstCommentLineIndent === undefined) {
firstCommentLineIndent = calculateIndent(text, lineMap[firstCommentLineAndCharacter.line], commentPos);
}
var currentWriterIndentSpacing = writer.getIndent() * getIndentSize();
var spacesToEmit = currentWriterIndentSpacing - firstCommentLineIndent + calculateIndent(text, pos, nextLineStart);
if (spacesToEmit > 0) {
var numberOfSingleSpacesToEmit = spacesToEmit % getIndentSize();
var indentSizeSpaceString = getIndentString((spacesToEmit - numberOfSingleSpacesToEmit) / getIndentSize());
writer.rawWrite(indentSizeSpaceString);
while (numberOfSingleSpacesToEmit) {
writer.rawWrite(" ");
numberOfSingleSpacesToEmit--;
}
}
else {
writer.rawWrite("");
}
}
writeTrimmedCurrentLine(text, commentEnd, writer, newLine, pos, nextLineStart);
pos = nextLineStart;
}
}
else {
writer.write(text.substring(commentPos, commentEnd));
}
}
ts.writeCommentRange = writeCommentRange;
function writeTrimmedCurrentLine(text, commentEnd, writer, newLine, pos, nextLineStart) {
var end = Math.min(commentEnd, nextLineStart - 1);
var currentLineText = text.substring(pos, end).replace(/^\s+|\s+$/g, "");
if (currentLineText) {
writer.write(currentLineText);
if (end !== commentEnd) {
writer.writeLine();
}
}
else {
writer.writeLiteral(newLine);
}
}
function calculateIndent(text, pos, end) {
var currentLineIndent = 0;
for (; pos < end && ts.isWhiteSpaceSingleLine(text.charCodeAt(pos)); pos++) {
if (text.charCodeAt(pos) === 9) {
currentLineIndent += getIndentSize() - (currentLineIndent % getIndentSize());
}
else {
currentLineIndent++;
}
}
return currentLineIndent;
}
function hasModifiers(node) {
return getModifierFlags(node) !== 0;
}
ts.hasModifiers = hasModifiers;
function hasModifier(node, flags) {
return !!getSelectedModifierFlags(node, flags);
}
ts.hasModifier = hasModifier;
function getSelectedModifierFlags(node, flags) {
return getModifierFlags(node) & flags;
}
ts.getSelectedModifierFlags = getSelectedModifierFlags;
function getModifierFlags(node) {
if (node.modifierFlagsCache & 536870912) {
return node.modifierFlagsCache & ~536870912;
}
var flags = getModifierFlagsNoCache(node);
node.modifierFlagsCache = flags | 536870912;
return flags;
}
ts.getModifierFlags = getModifierFlags;
function getModifierFlagsNoCache(node) {
var flags = 0;
if (node.modifiers) {
for (var _i = 0, _a = node.modifiers; _i < _a.length; _i++) {
var modifier = _a[_i];
flags |= modifierToFlag(modifier.kind);
}
}
if (node.flags & 4 || (node.kind === 71 && node.isInJSDocNamespace)) {
flags |= 1;
}
return flags;
}
ts.getModifierFlagsNoCache = getModifierFlagsNoCache;
function modifierToFlag(token) {
switch (token) {
case 115: return 32;
case 114: return 4;
case 113: return 16;
case 112: return 8;
case 117: return 128;
case 84: return 1;
case 124: return 2;
case 76: return 2048;
case 79: return 512;
case 120: return 256;
case 131: return 64;
}
return 0;
}
ts.modifierToFlag = modifierToFlag;
function isLogicalOperator(token) {
return token === 54
|| token === 53
|| token === 51;
}
ts.isLogicalOperator = isLogicalOperator;
function isAssignmentOperator(token) {
return token >= 58 && token <= 70;
}
ts.isAssignmentOperator = isAssignmentOperator;
function tryGetClassExtendingExpressionWithTypeArguments(node) {
if (node.kind === 201 &&
node.parent.token === 85 &&
ts.isClassLike(node.parent.parent)) {
return node.parent.parent;
}
}
ts.tryGetClassExtendingExpressionWithTypeArguments = tryGetClassExtendingExpressionWithTypeArguments;
function isAssignmentExpression(node, excludeCompoundAssignment) {
return ts.isBinaryExpression(node)
&& (excludeCompoundAssignment
? node.operatorToken.kind === 58
: isAssignmentOperator(node.operatorToken.kind))
&& ts.isLeftHandSideExpression(node.left);
}
ts.isAssignmentExpression = isAssignmentExpression;
function isDestructuringAssignment(node) {
if (isAssignmentExpression(node, true)) {
var kind = node.left.kind;
return kind === 178
|| kind === 177;
}
return false;
}
ts.isDestructuringAssignment = isDestructuringAssignment;
function isExpressionWithTypeArgumentsInClassExtendsClause(node) {
return tryGetClassExtendingExpressionWithTypeArguments(node) !== undefined;
}
ts.isExpressionWithTypeArgumentsInClassExtendsClause = isExpressionWithTypeArgumentsInClassExtendsClause;
function isExpressionWithTypeArgumentsInClassImplementsClause(node) {
return node.kind === 201
&& isEntityNameExpression(node.expression)
&& node.parent
&& node.parent.token === 108
&& node.parent.parent
&& ts.isClassLike(node.parent.parent);
}
ts.isExpressionWithTypeArgumentsInClassImplementsClause = isExpressionWithTypeArgumentsInClassImplementsClause;
function isEntityNameExpression(node) {
return node.kind === 71 ||
node.kind === 179 && isEntityNameExpression(node.expression);
}
ts.isEntityNameExpression = isEntityNameExpression;
function isRightSideOfQualifiedNameOrPropertyAccess(node) {
return (node.parent.kind === 143 && node.parent.right === node) ||
(node.parent.kind === 179 && node.parent.name === node);
}
ts.isRightSideOfQualifiedNameOrPropertyAccess = isRightSideOfQualifiedNameOrPropertyAccess;
function isEmptyObjectLiteral(expression) {
return expression.kind === 178 &&
expression.properties.length === 0;
}
ts.isEmptyObjectLiteral = isEmptyObjectLiteral;
function isEmptyArrayLiteral(expression) {
return expression.kind === 177 &&
expression.elements.length === 0;
}
ts.isEmptyArrayLiteral = isEmptyArrayLiteral;
function getLocalSymbolForExportDefault(symbol) {
return isExportDefaultSymbol(symbol) ? symbol.declarations[0].localSymbol : undefined;
}
ts.getLocalSymbolForExportDefault = getLocalSymbolForExportDefault;
function isExportDefaultSymbol(symbol) {
return symbol && ts.length(symbol.declarations) > 0 && hasModifier(symbol.declarations[0], 512);
}
function tryExtractTypeScriptExtension(fileName) {
return ts.find(ts.supportedTypescriptExtensionsForExtractExtension, function (extension) { return ts.fileExtensionIs(fileName, extension); });
}
ts.tryExtractTypeScriptExtension = tryExtractTypeScriptExtension;
function getExpandedCharCodes(input) {
var output = [];
var length = input.length;
for (var i = 0; i < length; i++) {
var charCode = input.charCodeAt(i);
if (charCode < 0x80) {
output.push(charCode);
}
else if (charCode < 0x800) {
output.push((charCode >> 6) | 192);
output.push((charCode & 63) | 128);
}
else if (charCode < 0x10000) {
output.push((charCode >> 12) | 224);
output.push(((charCode >> 6) & 63) | 128);
output.push((charCode & 63) | 128);
}
else if (charCode < 0x20000) {
output.push((charCode >> 18) | 240);
output.push(((charCode >> 12) & 63) | 128);
output.push(((charCode >> 6) & 63) | 128);
output.push((charCode & 63) | 128);
}
else {
ts.Debug.assert(false, "Unexpected code point");
}
}
return output;
}
var base64Digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
function convertToBase64(input) {
var result = "";
var charCodes = getExpandedCharCodes(input);
var i = 0;
var length = charCodes.length;
var byte1, byte2, byte3, byte4;
while (i < length) {
byte1 = charCodes[i] >> 2;
byte2 = (charCodes[i] & 3) << 4 | charCodes[i + 1] >> 4;
byte3 = (charCodes[i + 1] & 15) << 2 | charCodes[i + 2] >> 6;
byte4 = charCodes[i + 2] & 63;
if (i + 1 >= length) {
byte3 = byte4 = 64;
}
else if (i + 2 >= length) {
byte4 = 64;
}
result += base64Digits.charAt(byte1) + base64Digits.charAt(byte2) + base64Digits.charAt(byte3) + base64Digits.charAt(byte4);
i += 3;
}
return result;
}
ts.convertToBase64 = convertToBase64;
var carriageReturnLineFeed = "\r\n";
var lineFeed = "\n";
function getNewLineCharacter(options, system) {
switch (options.newLine) {
case 0:
return carriageReturnLineFeed;
case 1:
return lineFeed;
}
return system ? system.newLine : ts.sys ? ts.sys.newLine : carriageReturnLineFeed;
}
ts.getNewLineCharacter = getNewLineCharacter;
function formatEnum(value, enumObject, isFlags) {
if (value === void 0) { value = 0; }
var members = getEnumMembers(enumObject);
if (value === 0) {
return members.length > 0 && members[0][0] === 0 ? members[0][1] : "0";
}
if (isFlags) {
var result = "";
var remainingFlags = value;
for (var i = members.length - 1; i >= 0 && remainingFlags !== 0; i--) {
var _a = members[i], enumValue = _a[0], enumName = _a[1];
if (enumValue !== 0 && (remainingFlags & enumValue) === enumValue) {
remainingFlags &= ~enumValue;
result = "" + enumName + (result ? ", " : "") + result;
}
}
if (remainingFlags === 0) {
return result;
}
}
else {
for (var _i = 0, members_1 = members; _i < members_1.length; _i++) {
var _b = members_1[_i], enumValue = _b[0], enumName = _b[1];
if (enumValue === value) {
return enumName;
}
}
}
return value.toString();
}
function getEnumMembers(enumObject) {
var result = [];
for (var name in enumObject) {
var value = enumObject[name];
if (typeof value === "number") {
result.push([value, name]);
}
}
return ts.stableSort(result, function (x, y) { return ts.compareValues(x[0], y[0]); });
}
function formatSyntaxKind(kind) {
return formatEnum(kind, ts.SyntaxKind, false);
}
ts.formatSyntaxKind = formatSyntaxKind;
function formatModifierFlags(flags) {
return formatEnum(flags, ts.ModifierFlags, true);
}
ts.formatModifierFlags = formatModifierFlags;
function formatTransformFlags(flags) {
return formatEnum(flags, ts.TransformFlags, true);
}
ts.formatTransformFlags = formatTransformFlags;
function formatEmitFlags(flags) {
return formatEnum(flags, ts.EmitFlags, true);
}
ts.formatEmitFlags = formatEmitFlags;
function formatSymbolFlags(flags) {
return formatEnum(flags, ts.SymbolFlags, true);
}
ts.formatSymbolFlags = formatSymbolFlags;
function formatTypeFlags(flags) {
return formatEnum(flags, ts.TypeFlags, true);
}
ts.formatTypeFlags = formatTypeFlags;
function formatObjectFlags(flags) {
return formatEnum(flags, ts.ObjectFlags, true);
}
ts.formatObjectFlags = formatObjectFlags;
function createRange(pos, end) {
return { pos: pos, end: end };
}
ts.createRange = createRange;
function moveRangeEnd(range, end) {
return createRange(range.pos, end);
}
ts.moveRangeEnd = moveRangeEnd;
function moveRangePos(range, pos) {
return createRange(pos, range.end);
}
ts.moveRangePos = moveRangePos;
function moveRangePastDecorators(node) {
return node.decorators && node.decorators.length > 0
? moveRangePos(node, node.decorators.end)
: node;
}
ts.moveRangePastDecorators = moveRangePastDecorators;
function moveRangePastModifiers(node) {
return node.modifiers && node.modifiers.length > 0
? moveRangePos(node, node.modifiers.end)
: moveRangePastDecorators(node);
}
ts.moveRangePastModifiers = moveRangePastModifiers;
function isCollapsedRange(range) {
return range.pos === range.end;
}
ts.isCollapsedRange = isCollapsedRange;
function createTokenRange(pos, token) {
return createRange(pos, pos + ts.tokenToString(token).length);
}
ts.createTokenRange = createTokenRange;
function rangeIsOnSingleLine(range, sourceFile) {
return rangeStartIsOnSameLineAsRangeEnd(range, range, sourceFile);
}
ts.rangeIsOnSingleLine = rangeIsOnSingleLine;
function rangeStartPositionsAreOnSameLine(range1, range2, sourceFile) {
return positionsAreOnSameLine(getStartPositionOfRange(range1, sourceFile), getStartPositionOfRange(range2, sourceFile), sourceFile);
}
ts.rangeStartPositionsAreOnSameLine = rangeStartPositionsAreOnSameLine;
function rangeEndPositionsAreOnSameLine(range1, range2, sourceFile) {
return positionsAreOnSameLine(range1.end, range2.end, sourceFile);
}
ts.rangeEndPositionsAreOnSameLine = rangeEndPositionsAreOnSameLine;
function rangeStartIsOnSameLineAsRangeEnd(range1, range2, sourceFile) {
return positionsAreOnSameLine(getStartPositionOfRange(range1, sourceFile), range2.end, sourceFile);
}
ts.rangeStartIsOnSameLineAsRangeEnd = rangeStartIsOnSameLineAsRangeEnd;
function rangeEndIsOnSameLineAsRangeStart(range1, range2, sourceFile) {
return positionsAreOnSameLine(range1.end, getStartPositionOfRange(range2, sourceFile), sourceFile);
}
ts.rangeEndIsOnSameLineAsRangeStart = rangeEndIsOnSameLineAsRangeStart;
function positionsAreOnSameLine(pos1, pos2, sourceFile) {
return pos1 === pos2 ||
getLineOfLocalPosition(sourceFile, pos1) === getLineOfLocalPosition(sourceFile, pos2);
}
ts.positionsAreOnSameLine = positionsAreOnSameLine;
function getStartPositionOfRange(range, sourceFile) {
return ts.positionIsSynthesized(range.pos) ? -1 : ts.skipTrivia(sourceFile.text, range.pos);
}
ts.getStartPositionOfRange = getStartPositionOfRange;
function isDeclarationNameOfEnumOrNamespace(node) {
var parseNode = ts.getParseTreeNode(node);
if (parseNode) {
switch (parseNode.parent.kind) {
case 232:
case 233:
return parseNode === parseNode.parent.name;
}
}
return false;
}
ts.isDeclarationNameOfEnumOrNamespace = isDeclarationNameOfEnumOrNamespace;
function getInitializedVariables(node) {
return ts.filter(node.declarations, isInitializedVariable);
}
ts.getInitializedVariables = getInitializedVariables;
function isInitializedVariable(node) {
return node.initializer !== undefined;
}
function isWatchSet(options) {
return options.watch && options.hasOwnProperty("watch");
}
ts.isWatchSet = isWatchSet;
function getCheckFlags(symbol) {
return symbol.flags & 33554432 ? symbol.checkFlags : 0;
}
ts.getCheckFlags = getCheckFlags;
function getDeclarationModifierFlagsFromSymbol(s) {
if (s.valueDeclaration) {
var flags = ts.getCombinedModifierFlags(s.valueDeclaration);
return s.parent && s.parent.flags & 32 ? flags : flags & ~28;
}
if (getCheckFlags(s) & 6) {
var checkFlags = s.checkFlags;
var accessModifier = checkFlags & 256 ? 8 :
checkFlags & 64 ? 4 :
16;
var staticModifier = checkFlags & 512 ? 32 : 0;
return accessModifier | staticModifier;
}
if (s.flags & 4194304) {
return 4 | 32;
}
return 0;
}
ts.getDeclarationModifierFlagsFromSymbol = getDeclarationModifierFlagsFromSymbol;
function levenshtein(s1, s2) {
var previous = new Array(s2.length + 1);
var current = new Array(s2.length + 1);
for (var i = 0; i < s2.length + 1; i++) {
previous[i] = i;
current[i] = -1;
}
for (var i = 1; i < s1.length + 1; i++) {
current[0] = i;
for (var j = 1; j < s2.length + 1; j++) {
current[j] = Math.min(previous[j] + 1, current[j - 1] + 1, previous[j - 1] + (s1[i - 1] === s2[j - 1] ? 0 : 2));
}
var tmp = previous;
previous = current;
current = tmp;
}
return previous[previous.length - 1];
}
ts.levenshtein = levenshtein;
function skipAlias(symbol, checker) {
return symbol.flags & 2097152 ? checker.getAliasedSymbol(symbol) : symbol;
}
ts.skipAlias = skipAlias;
function getCombinedLocalAndExportSymbolFlags(symbol) {
return symbol.exportSymbol ? symbol.exportSymbol.flags | symbol.flags : symbol.flags;
}
ts.getCombinedLocalAndExportSymbolFlags = getCombinedLocalAndExportSymbolFlags;
function isWriteOnlyAccess(node) {
return accessKind(node) === 1;
}
ts.isWriteOnlyAccess = isWriteOnlyAccess;
function isWriteAccess(node) {
return accessKind(node) !== 0;
}
ts.isWriteAccess = isWriteAccess;
function accessKind(node) {
var parent = node.parent;
if (!parent)
return 0;
switch (parent.kind) {
case 193:
case 192:
var operator = parent.operator;
return operator === 43 || operator === 44 ? writeOrReadWrite() : 0;
case 194:
var _a = parent, left = _a.left, operatorToken = _a.operatorToken;
return left === node && isAssignmentOperator(operatorToken.kind) ? writeOrReadWrite() : 0;
case 179:
return parent.name !== node ? 0 : accessKind(parent);
default:
return 0;
}
function writeOrReadWrite() {
return parent.parent && parent.parent.kind === 210 ? 1 : 2;
}
}
function compareDataObjects(dst, src) {
if (!dst || !src || Object.keys(dst).length !== Object.keys(src).length) {
return false;
}
for (var e in dst) {
if (typeof dst[e] === "object") {
if (!compareDataObjects(dst[e], src[e])) {
return false;
}
}
else if (typeof dst[e] !== "function") {
if (dst[e] !== src[e]) {
return false;
}
}
}
return true;
}
ts.compareDataObjects = compareDataObjects;
function clearMap(map, onDeleteValue) {
map.forEach(onDeleteValue);
map.clear();
}
ts.clearMap = clearMap;
function mutateMap(map, newMap, options) {
var createNewValue = options.createNewValue, onDeleteValue = options.onDeleteValue, onExistingValue = options.onExistingValue;
map.forEach(function (existingValue, key) {
var valueInNewMap = newMap.get(key);
if (valueInNewMap === undefined) {
map.delete(key);
onDeleteValue(existingValue, key);
}
else if (onExistingValue) {
onExistingValue(existingValue, valueInNewMap, key);
}
});
newMap.forEach(function (valueInNewMap, key) {
if (!map.has(key)) {
map.set(key, createNewValue(key, valueInNewMap));
}
});
}
ts.mutateMap = mutateMap;
function forEachAncestorDirectory(directory, callback) {
while (true) {
var result = callback(directory);
if (result !== undefined) {
return result;
}
var parentPath = ts.getDirectoryPath(directory);
if (parentPath === directory) {
return undefined;
}
directory = parentPath;
}
}
ts.forEachAncestorDirectory = forEachAncestorDirectory;
})(ts || (ts = {}));
(function (ts) {
function getDefaultLibFileName(options) {
switch (options.target) {
case 5:
return "lib.esnext.full.d.ts";
case 4:
return "lib.es2017.full.d.ts";
case 3:
return "lib.es2016.full.d.ts";
case 2:
return "lib.es6.d.ts";
default:
return "lib.d.ts";
}
}
ts.getDefaultLibFileName = getDefaultLibFileName;
function textSpanEnd(span) {
return span.start + span.length;
}
ts.textSpanEnd = textSpanEnd;
function textSpanIsEmpty(span) {
return span.length === 0;
}
ts.textSpanIsEmpty = textSpanIsEmpty;
function textSpanContainsPosition(span, position) {
return position >= span.start && position < textSpanEnd(span);
}
ts.textSpanContainsPosition = textSpanContainsPosition;
function textSpanContainsTextSpan(span, other) {
return other.start >= span.start && textSpanEnd(other) <= textSpanEnd(span);
}
ts.textSpanContainsTextSpan = textSpanContainsTextSpan;
function textSpanOverlapsWith(span, other) {
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 === 145) {
for (var current = d; current; current = current.parent) {
if (ts.isFunctionLike(current) || ts.isClassLike(current) || current.kind === 230) {
return current;
}
}
}
}
ts.getTypeParameterOwner = getTypeParameterOwner;
function isParameterPropertyDeclaration(node) {
return ts.hasModifier(node, 92) && node.parent.kind === 152 && ts.isClassLike(node.parent.parent);
}
ts.isParameterPropertyDeclaration = isParameterPropertyDeclaration;
function isEmptyBindingPattern(node) {
if (ts.isBindingPattern(node)) {
return ts.every(node.elements, isEmptyBindingElement);
}
return false;
}
ts.isEmptyBindingPattern = isEmptyBindingPattern;
function isEmptyBindingElement(node) {
if (ts.isOmittedExpression(node)) {
return true;
}
return isEmptyBindingPattern(node.name);
}
ts.isEmptyBindingElement = isEmptyBindingElement;
function walkUpBindingElementsAndPatterns(node) {
while (node && (node.kind === 176 || ts.isBindingPattern(node))) {
node = node.parent;
}
return node;
}
function getCombinedModifierFlags(node) {
node = walkUpBindingElementsAndPatterns(node);
var flags = ts.getModifierFlags(node);
if (node.kind === 226) {
node = node.parent;
}
if (node && node.kind === 227) {
flags |= ts.getModifierFlags(node);
node = node.parent;
}
if (node && node.kind === 208) {
flags |= ts.getModifierFlags(node);
}
return flags;
}
ts.getCombinedModifierFlags = getCombinedModifierFlags;
function getCombinedNodeFlags(node) {
node = walkUpBindingElementsAndPatterns(node);
var flags = node.flags;
if (node.kind === 226) {
node = node.parent;
}
if (node && node.kind === 227) {
flags |= node.flags;
node = node.parent;
}
if (node && node.kind === 208) {
flags |= node.flags;
}
return flags;
}
ts.getCombinedNodeFlags = getCombinedNodeFlags;
function validateLocaleAndSetLanguage(locale, sys, errors) {
var matchResult = /^([a-z]+)([_\-]([a-z]+))?$/.exec(locale.toLowerCase());
if (!matchResult) {
if (errors) {
errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1, "en", "ja-jp"));
}
return;
}
var language = matchResult[1];
var territory = matchResult[3];
if (!trySetLanguageAndTerritory(language, territory, errors)) {
trySetLanguageAndTerritory(language, undefined, errors);
}
function trySetLanguageAndTerritory(language, territory, errors) {
var compilerFilePath = ts.normalizePath(sys.getExecutingFilePath());
var containingDirectoryPath = ts.getDirectoryPath(compilerFilePath);
var filePath = ts.combinePaths(containingDirectoryPath, language);
if (territory) {
filePath = filePath + "-" + territory;
}
filePath = sys.resolvePath(ts.combinePaths(filePath, "diagnosticMessages.generated.json"));
if (!sys.fileExists(filePath)) {
return false;
}
var fileContents = "";
try {
fileContents = sys.readFile(filePath);
}
catch (e) {
if (errors) {
errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unable_to_open_file_0, filePath));
}
return false;
}
try {
ts.localizedDiagnosticMessages = JSON.parse(fileContents);
}
catch (e) {
if (errors) {
errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Corrupted_locale_file_0, filePath));
}
return false;
}
return true;
}
}
ts.validateLocaleAndSetLanguage = validateLocaleAndSetLanguage;
function getOriginalNode(node, nodeTest) {
if (node) {
while (node.original !== undefined) {
node = node.original;
}
}
return !nodeTest || nodeTest(node) ? node : undefined;
}
ts.getOriginalNode = getOriginalNode;
function isParseTreeNode(node) {
return (node.flags & 8) === 0;
}
ts.isParseTreeNode = isParseTreeNode;
function getParseTreeNode(node, nodeTest) {
if (node === undefined || isParseTreeNode(node)) {
return node;
}
node = getOriginalNode(node);
if (isParseTreeNode(node) && (!nodeTest || nodeTest(node))) {
return node;
}
return undefined;
}
ts.getParseTreeNode = getParseTreeNode;
function unescapeLeadingUnderscores(identifier) {
var id = identifier;
return id.length >= 3 && id.charCodeAt(0) === 95 && id.charCodeAt(1) === 95 && id.charCodeAt(2) === 95 ? id.substr(1) : id;
}
ts.unescapeLeadingUnderscores = unescapeLeadingUnderscores;
function idText(identifier) {
return unescapeLeadingUnderscores(identifier.escapedText);
}
ts.idText = idText;
function symbolName(symbol) {
return unescapeLeadingUnderscores(symbol.escapedName);
}
ts.symbolName = symbolName;
function unescapeIdentifier(id) {
return id;
}
ts.unescapeIdentifier = unescapeIdentifier;
function nameForNamelessJSDocTypedef(declaration) {
var hostNode = declaration.parent.parent;
if (!hostNode) {
return undefined;
}
if (ts.isDeclaration(hostNode)) {
return getDeclarationIdentifier(hostNode);
}
switch (hostNode.kind) {
case 208:
if (hostNode.declarationList &&
hostNode.declarationList.declarations[0]) {
return getDeclarationIdentifier(hostNode.declarationList.declarations[0]);
}
return undefined;
case 210:
var expr = hostNode.expression;
switch (expr.kind) {
case 179:
return expr.name;
case 180:
var arg = expr.argumentExpression;
if (ts.isIdentifier(arg)) {
return arg;
}
}
return undefined;
case 1:
return undefined;
case 185: {
return getDeclarationIdentifier(hostNode.expression);
}
case 222: {
if (ts.isDeclaration(hostNode.statement) || ts.isExpression(hostNode.statement)) {
return getDeclarationIdentifier(hostNode.statement);
}
return undefined;
}
default:
ts.Debug.assertNever(hostNode, "Found typedef tag attached to node which it should not be!");
}
}
function getDeclarationIdentifier(node) {
var name = getNameOfDeclaration(node);
return ts.isIdentifier(name) ? name : undefined;
}
function getNameOfJSDocTypedef(declaration) {
return declaration.name || nameForNamelessJSDocTypedef(declaration);
}
ts.getNameOfJSDocTypedef = getNameOfJSDocTypedef;
function getNameOfDeclaration(declaration) {
if (!declaration) {
return undefined;
}
switch (declaration.kind) {
case 284:
case 279: {
var name = declaration.name;
if (name.kind === 143) {
return name.right;
}
break;
}
case 194: {
var expr = declaration;
switch (ts.getSpecialPropertyAssignmentKind(expr)) {
case 1:
case 4:
case 5:
case 3:
return expr.left.name;
default:
return undefined;
}
}
case 283:
return getNameOfJSDocTypedef(declaration);
case 243: {
var expression = declaration.expression;
return ts.isIdentifier(expression) ? expression : undefined;
}
}
return declaration.name;
}
ts.getNameOfDeclaration = getNameOfDeclaration;
function getJSDocParameterTags(param) {
if (param.name && ts.isIdentifier(param.name)) {
var name_1 = param.name.escapedText;
return getJSDocTags(param.parent).filter(function (tag) { return ts.isJSDocParameterTag(tag) && ts.isIdentifier(tag.name) && tag.name.escapedText === name_1; });
}
return undefined;
}
ts.getJSDocParameterTags = getJSDocParameterTags;
function hasJSDocParameterTags(node) {
return !!getFirstJSDocTag(node, 279);
}
ts.hasJSDocParameterTags = hasJSDocParameterTags;
function getJSDocAugmentsTag(node) {
return getFirstJSDocTag(node, 277);
}
ts.getJSDocAugmentsTag = getJSDocAugmentsTag;
function getJSDocClassTag(node) {
return getFirstJSDocTag(node, 278);
}
ts.getJSDocClassTag = getJSDocClassTag;
function getJSDocReturnTag(node) {
return getFirstJSDocTag(node, 280);
}
ts.getJSDocReturnTag = getJSDocReturnTag;
function getJSDocTemplateTag(node) {
return getFirstJSDocTag(node, 282);
}
ts.getJSDocTemplateTag = getJSDocTemplateTag;
function getJSDocTypeTag(node) {
var tag = getFirstJSDocTag(node, 281);
if (tag && tag.typeExpression && tag.typeExpression.type) {
return tag;
}
return undefined;
}
ts.getJSDocTypeTag = getJSDocTypeTag;
function getJSDocType(node) {
var tag = getFirstJSDocTag(node, 281);
if (!tag && node.kind === 146) {
var paramTags = getJSDocParameterTags(node);
if (paramTags) {
tag = ts.find(paramTags, function (tag) { return !!tag.typeExpression; });
}
}
return tag && tag.typeExpression && tag.typeExpression.type;
}
ts.getJSDocType = getJSDocType;
function getJSDocReturnType(node) {
var returnTag = getJSDocReturnTag(node);
return returnTag && returnTag.typeExpression && returnTag.typeExpression.type;
}
ts.getJSDocReturnType = getJSDocReturnType;
function getJSDocTags(node) {
var tags = node.jsDocCache;
if (tags === undefined) {
node.jsDocCache = tags = ts.flatMap(ts.getJSDocCommentsAndTags(node), function (j) { return ts.isJSDoc(j) ? j.tags : j; });
}
return tags;
}
ts.getJSDocTags = getJSDocTags;
function getFirstJSDocTag(node, kind) {
var tags = getJSDocTags(node);
return ts.find(tags, function (doc) { return doc.kind === kind; });
}
function getAllJSDocTagsOfKind(node, kind) {
var tags = getJSDocTags(node);
return ts.filter(tags, function (doc) { return doc.kind === kind; });
}
ts.getAllJSDocTagsOfKind = getAllJSDocTagsOfKind;
})(ts || (ts = {}));
(function (ts) {
function isNumericLiteral(node) {
return node.kind === 8;
}
ts.isNumericLiteral = isNumericLiteral;
function isStringLiteral(node) {
return node.kind === 9;
}
ts.isStringLiteral = isStringLiteral;
function isJsxText(node) {
return node.kind === 10;
}
ts.isJsxText = isJsxText;
function isRegularExpressionLiteral(node) {
return node.kind === 12;
}
ts.isRegularExpressionLiteral = isRegularExpressionLiteral;
function isNoSubstitutionTemplateLiteral(node) {
return node.kind === 13;
}
ts.isNoSubstitutionTemplateLiteral = isNoSubstitutionTemplateLiteral;
function isTemplateHead(node) {
return node.kind === 14;
}
ts.isTemplateHead = isTemplateHead;
function isTemplateMiddle(node) {
return node.kind === 15;
}
ts.isTemplateMiddle = isTemplateMiddle;
function isTemplateTail(node) {
return node.kind === 16;
}
ts.isTemplateTail = isTemplateTail;
function isIdentifier(node) {
return node.kind === 71;
}
ts.isIdentifier = isIdentifier;
function isQualifiedName(node) {
return node.kind === 143;
}
ts.isQualifiedName = isQualifiedName;
function isComputedPropertyName(node) {
return node.kind === 144;
}
ts.isComputedPropertyName = isComputedPropertyName;
function isTypeParameterDeclaration(node) {
return node.kind === 145;
}
ts.isTypeParameterDeclaration = isTypeParameterDeclaration;
function isParameter(node) {
return node.kind === 146;
}
ts.isParameter = isParameter;
function isDecorator(node) {
return node.kind === 147;
}
ts.isDecorator = isDecorator;
function isPropertySignature(node) {
return node.kind === 148;
}
ts.isPropertySignature = isPropertySignature;
function isPropertyDeclaration(node) {
return node.kind === 149;
}
ts.isPropertyDeclaration = isPropertyDeclaration;
function isMethodSignature(node) {
return node.kind === 150;
}
ts.isMethodSignature = isMethodSignature;
function isMethodDeclaration(node) {
return node.kind === 151;
}
ts.isMethodDeclaration = isMethodDeclaration;
function isConstructorDeclaration(node) {
return node.kind === 152;
}
ts.isConstructorDeclaration = isConstructorDeclaration;
function isGetAccessorDeclaration(node) {
return node.kind === 153;
}
ts.isGetAccessorDeclaration = isGetAccessorDeclaration;
function isSetAccessorDeclaration(node) {
return node.kind === 154;
}
ts.isSetAccessorDeclaration = isSetAccessorDeclaration;
function isCallSignatureDeclaration(node) {
return node.kind === 155;
}
ts.isCallSignatureDeclaration = isCallSignatureDeclaration;
function isConstructSignatureDeclaration(node) {
return node.kind === 156;
}
ts.isConstructSignatureDeclaration = isConstructSignatureDeclaration;
function isIndexSignatureDeclaration(node) {
return node.kind === 157;
}
ts.isIndexSignatureDeclaration = isIndexSignatureDeclaration;
function isTypePredicateNode(node) {
return node.kind === 158;
}
ts.isTypePredicateNode = isTypePredicateNode;
function isTypeReferenceNode(node) {
return node.kind === 159;
}
ts.isTypeReferenceNode = isTypeReferenceNode;
function isFunctionTypeNode(node) {
return node.kind === 160;
}
ts.isFunctionTypeNode = isFunctionTypeNode;
function isConstructorTypeNode(node) {
return node.kind === 161;
}
ts.isConstructorTypeNode = isConstructorTypeNode;
function isTypeQueryNode(node) {
return node.kind === 162;
}
ts.isTypeQueryNode = isTypeQueryNode;
function isTypeLiteralNode(node) {
return node.kind === 163;
}
ts.isTypeLiteralNode = isTypeLiteralNode;
function isArrayTypeNode(node) {
return node.kind === 164;
}
ts.isArrayTypeNode = isArrayTypeNode;
function isTupleTypeNode(node) {
return node.kind === 165;
}
ts.isTupleTypeNode = isTupleTypeNode;
function isUnionTypeNode(node) {
return node.kind === 166;
}
ts.isUnionTypeNode = isUnionTypeNode;
function isIntersectionTypeNode(node) {
return node.kind === 167;
}
ts.isIntersectionTypeNode = isIntersectionTypeNode;
function isParenthesizedTypeNode(node) {
return node.kind === 168;
}
ts.isParenthesizedTypeNode = isParenthesizedTypeNode;
function isThisTypeNode(node) {
return node.kind === 169;
}
ts.isThisTypeNode = isThisTypeNode;
function isTypeOperatorNode(node) {
return node.kind === 170;
}
ts.isTypeOperatorNode = isTypeOperatorNode;
function isIndexedAccessTypeNode(node) {
return node.kind === 171;
}
ts.isIndexedAccessTypeNode = isIndexedAccessTypeNode;
function isMappedTypeNode(node) {
return node.kind === 172;
}
ts.isMappedTypeNode = isMappedTypeNode;
function isLiteralTypeNode(node) {
return node.kind === 173;
}
ts.isLiteralTypeNode = isLiteralTypeNode;
function isObjectBindingPattern(node) {
return node.kind === 174;
}
ts.isObjectBindingPattern = isObjectBindingPattern;
function isArrayBindingPattern(node) {
return node.kind === 175;
}
ts.isArrayBindingPattern = isArrayBindingPattern;
function isBindingElement(node) {
return node.kind === 176;
}
ts.isBindingElement = isBindingElement;
function isArrayLiteralExpression(node) {
return node.kind === 177;
}
ts.isArrayLiteralExpression = isArrayLiteralExpression;
function isObjectLiteralExpression(node) {
return node.kind === 178;
}
ts.isObjectLiteralExpression = isObjectLiteralExpression;
function isPropertyAccessExpression(node) {
return node.kind === 179;
}
ts.isPropertyAccessExpression = isPropertyAccessExpression;
function isElementAccessExpression(node) {
return node.kind === 180;
}
ts.isElementAccessExpression = isElementAccessExpression;
function isCallExpression(node) {
return node.kind === 181;
}
ts.isCallExpression = isCallExpression;
function isNewExpression(node) {
return node.kind === 182;
}
ts.isNewExpression = isNewExpression;
function isTaggedTemplateExpression(node) {
return node.kind === 183;
}
ts.isTaggedTemplateExpression = isTaggedTemplateExpression;
function isTypeAssertion(node) {
return node.kind === 184;
}
ts.isTypeAssertion = isTypeAssertion;
function isParenthesizedExpression(node) {
return node.kind === 185;
}
ts.isParenthesizedExpression = isParenthesizedExpression;
function skipPartiallyEmittedExpressions(node) {
while (node.kind === 288) {
node = node.expression;
}
return node;
}
ts.skipPartiallyEmittedExpressions = skipPartiallyEmittedExpressions;
function isFunctionExpression(node) {
return node.kind === 186;
}
ts.isFunctionExpression = isFunctionExpression;
function isArrowFunction(node) {
return node.kind === 187;
}
ts.isArrowFunction = isArrowFunction;
function isDeleteExpression(node) {
return node.kind === 188;
}
ts.isDeleteExpression = isDeleteExpression;
function isTypeOfExpression(node) {
return node.kind === 191;
}
ts.isTypeOfExpression = isTypeOfExpression;
function isVoidExpression(node) {
return node.kind === 190;
}
ts.isVoidExpression = isVoidExpression;
function isAwaitExpression(node) {
return node.kind === 191;
}
ts.isAwaitExpression = isAwaitExpression;
function isPrefixUnaryExpression(node) {
return node.kind === 192;
}
ts.isPrefixUnaryExpression = isPrefixUnaryExpression;
function isPostfixUnaryExpression(node) {
return node.kind === 193;
}
ts.isPostfixUnaryExpression = isPostfixUnaryExpression;
function isBinaryExpression(node) {
return node.kind === 194;
}
ts.isBinaryExpression = isBinaryExpression;
function isConditionalExpression(node) {
return node.kind === 195;
}
ts.isConditionalExpression = isConditionalExpression;
function isTemplateExpression(node) {
return node.kind === 196;
}
ts.isTemplateExpression = isTemplateExpression;
function isYieldExpression(node) {
return node.kind === 197;
}
ts.isYieldExpression = isYieldExpression;
function isSpreadElement(node) {
return node.kind === 198;
}
ts.isSpreadElement = isSpreadElement;
function isClassExpression(node) {
return node.kind === 199;
}
ts.isClassExpression = isClassExpression;
function isOmittedExpression(node) {
return node.kind === 200;
}
ts.isOmittedExpression = isOmittedExpression;
function isExpressionWithTypeArguments(node) {
return node.kind === 201;
}
ts.isExpressionWithTypeArguments = isExpressionWithTypeArguments;
function isAsExpression(node) {
return node.kind === 202;
}
ts.isAsExpression = isAsExpression;
function isNonNullExpression(node) {
return node.kind === 203;
}
ts.isNonNullExpression = isNonNullExpression;
function isMetaProperty(node) {
return node.kind === 204;
}
ts.isMetaProperty = isMetaProperty;
function isTemplateSpan(node) {
return node.kind === 205;
}
ts.isTemplateSpan = isTemplateSpan;
function isSemicolonClassElement(node) {
return node.kind === 206;
}
ts.isSemicolonClassElement = isSemicolonClassElement;
function isBlock(node) {
return node.kind === 207;
}
ts.isBlock = isBlock;
function isVariableStatement(node) {
return node.kind === 208;
}
ts.isVariableStatement = isVariableStatement;
function isEmptyStatement(node) {
return node.kind === 209;
}
ts.isEmptyStatement = isEmptyStatement;
function isExpressionStatement(node) {
return node.kind === 210;
}
ts.isExpressionStatement = isExpressionStatement;
function isIfStatement(node) {
return node.kind === 211;
}
ts.isIfStatement = isIfStatement;
function isDoStatement(node) {
return node.kind === 212;
}
ts.isDoStatement = isDoStatement;
function isWhileStatement(node) {
return node.kind === 213;
}
ts.isWhileStatement = isWhileStatement;
function isForStatement(node) {
return node.kind === 214;
}
ts.isForStatement = isForStatement;
function isForInStatement(node) {
return node.kind === 215;
}
ts.isForInStatement = isForInStatement;
function isForOfStatement(node) {
return node.kind === 216;
}
ts.isForOfStatement = isForOfStatement;
function isContinueStatement(node) {
return node.kind === 217;
}
ts.isContinueStatement = isContinueStatement;
function isBreakStatement(node) {
return node.kind === 218;
}
ts.isBreakStatement = isBreakStatement;
function isReturnStatement(node) {
return node.kind === 219;
}
ts.isReturnStatement = isReturnStatement;
function isWithStatement(node) {
return node.kind === 220;
}
ts.isWithStatement = isWithStatement;
function isSwitchStatement(node) {
return node.kind === 221;
}
ts.isSwitchStatement = isSwitchStatement;
function isLabeledStatement(node) {
return node.kind === 222;
}
ts.isLabeledStatement = isLabeledStatement;
function isThrowStatement(node) {
return node.kind === 223;
}
ts.isThrowStatement = isThrowStatement;
function isTryStatement(node) {
return node.kind === 224;
}
ts.isTryStatement = isTryStatement;
function isDebuggerStatement(node) {
return node.kind === 225;
}
ts.isDebuggerStatement = isDebuggerStatement;
function isVariableDeclaration(node) {
return node.kind === 226;
}
ts.isVariableDeclaration = isVariableDeclaration;
function isVariableDeclarationList(node) {
return node.kind === 227;
}
ts.isVariableDeclarationList = isVariableDeclarationList;
function isFunctionDeclaration(node) {
return node.kind === 228;
}
ts.isFunctionDeclaration = isFunctionDeclaration;
function isClassDeclaration(node) {
return node.kind === 229;
}
ts.isClassDeclaration = isClassDeclaration;
function isInterfaceDeclaration(node) {
return node.kind === 230;
}
ts.isInterfaceDeclaration = isInterfaceDeclaration;
function isTypeAliasDeclaration(node) {
return node.kind === 231;
}
ts.isTypeAliasDeclaration = isTypeAliasDeclaration;
function isEnumDeclaration(node) {
return node.kind === 232;
}
ts.isEnumDeclaration = isEnumDeclaration;
function isModuleDeclaration(node) {
return node.kind === 233;
}
ts.isModuleDeclaration = isModuleDeclaration;
function isModuleBlock(node) {
return node.kind === 234;
}
ts.isModuleBlock = isModuleBlock;
function isCaseBlock(node) {
return node.kind === 235;
}
ts.isCaseBlock = isCaseBlock;
function isNamespaceExportDeclaration(node) {
return node.kind === 236;
}
ts.isNamespaceExportDeclaration = isNamespaceExportDeclaration;
function isImportEqualsDeclaration(node) {
return node.kind === 237;
}
ts.isImportEqualsDeclaration = isImportEqualsDeclaration;
function isImportDeclaration(node) {
return node.kind === 238;
}
ts.isImportDeclaration = isImportDeclaration;
function isImportClause(node) {
return node.kind === 239;
}
ts.isImportClause = isImportClause;
function isNamespaceImport(node) {
return node.kind === 240;
}
ts.isNamespaceImport = isNamespaceImport;
function isNamedImports(node) {
return node.kind === 241;
}
ts.isNamedImports = isNamedImports;
function isImportSpecifier(node) {
return node.kind === 242;
}
ts.isImportSpecifier = isImportSpecifier;
function isExportAssignment(node) {
return node.kind === 243;
}
ts.isExportAssignment = isExportAssignment;
function isExportDeclaration(node) {
return node.kind === 244;
}
ts.isExportDeclaration = isExportDeclaration;
function isNamedExports(node) {
return node.kind === 245;
}
ts.isNamedExports = isNamedExports;
function isExportSpecifier(node) {
return node.kind === 246;
}
ts.isExportSpecifier = isExportSpecifier;
function isMissingDeclaration(node) {
return node.kind === 247;
}
ts.isMissingDeclaration = isMissingDeclaration;
function isExternalModuleReference(node) {
return node.kind === 248;
}
ts.isExternalModuleReference = isExternalModuleReference;
function isJsxElement(node) {
return node.kind === 249;
}
ts.isJsxElement = isJsxElement;
function isJsxSelfClosingElement(node) {
return node.kind === 250;
}
ts.isJsxSelfClosingElement = isJsxSelfClosingElement;
function isJsxOpeningElement(node) {
return node.kind === 251;
}
ts.isJsxOpeningElement = isJsxOpeningElement;
function isJsxClosingElement(node) {
return node.kind === 252;
}
ts.isJsxClosingElement = isJsxClosingElement;
function isJsxAttribute(node) {
return node.kind === 253;
}
ts.isJsxAttribute = isJsxAttribute;
function isJsxAttributes(node) {
return node.kind === 254;
}
ts.isJsxAttributes = isJsxAttributes;
function isJsxSpreadAttribute(node) {
return node.kind === 255;
}
ts.isJsxSpreadAttribute = isJsxSpreadAttribute;
function isJsxExpression(node) {
return node.kind === 256;
}
ts.isJsxExpression = isJsxExpression;
function isCaseClause(node) {
return node.kind === 257;
}
ts.isCaseClause = isCaseClause;
function isDefaultClause(node) {
return node.kind === 258;
}
ts.isDefaultClause = isDefaultClause;
function isHeritageClause(node) {
return node.kind === 259;
}
ts.isHeritageClause = isHeritageClause;
function isCatchClause(node) {
return node.kind === 260;
}
ts.isCatchClause = isCatchClause;
function isPropertyAssignment(node) {
return node.kind === 261;
}
ts.isPropertyAssignment = isPropertyAssignment;
function isShorthandPropertyAssignment(node) {
return node.kind === 262;
}
ts.isShorthandPropertyAssignment = isShorthandPropertyAssignment;
function isSpreadAssignment(node) {
return node.kind === 263;
}
ts.isSpreadAssignment = isSpreadAssignment;
function isEnumMember(node) {
return node.kind === 264;
}
ts.isEnumMember = isEnumMember;
function isSourceFile(node) {
return node.kind === 265;
}
ts.isSourceFile = isSourceFile;
function isBundle(node) {
return node.kind === 266;
}
ts.isBundle = isBundle;
function isJSDocTypeExpression(node) {
return node.kind === 267;
}
ts.isJSDocTypeExpression = isJSDocTypeExpression;
function isJSDocAllType(node) {
return node.kind === 268;
}
ts.isJSDocAllType = isJSDocAllType;
function isJSDocUnknownType(node) {
return node.kind === 269;
}
ts.isJSDocUnknownType = isJSDocUnknownType;
function isJSDocNullableType(node) {
return node.kind === 270;
}
ts.isJSDocNullableType = isJSDocNullableType;
function isJSDocNonNullableType(node) {
return node.kind === 271;
}
ts.isJSDocNonNullableType = isJSDocNonNullableType;
function isJSDocOptionalType(node) {
return node.kind === 272;
}
ts.isJSDocOptionalType = isJSDocOptionalType;
function isJSDocFunctionType(node) {
return node.kind === 273;
}
ts.isJSDocFunctionType = isJSDocFunctionType;
function isJSDocVariadicType(node) {
return node.kind === 274;
}
ts.isJSDocVariadicType = isJSDocVariadicType;
function isJSDoc(node) {
return node.kind === 275;
}
ts.isJSDoc = isJSDoc;
function isJSDocAugmentsTag(node) {
return node.kind === 277;
}
ts.isJSDocAugmentsTag = isJSDocAugmentsTag;
function isJSDocParameterTag(node) {
return node.kind === 279;
}
ts.isJSDocParameterTag = isJSDocParameterTag;
function isJSDocReturnTag(node) {
return node.kind === 280;
}
ts.isJSDocReturnTag = isJSDocReturnTag;
function isJSDocTypeTag(node) {
return node.kind === 281;
}
ts.isJSDocTypeTag = isJSDocTypeTag;
function isJSDocTemplateTag(node) {
return node.kind === 282;
}
ts.isJSDocTemplateTag = isJSDocTemplateTag;
function isJSDocTypedefTag(node) {
return node.kind === 283;
}
ts.isJSDocTypedefTag = isJSDocTypedefTag;
function isJSDocPropertyTag(node) {
return node.kind === 284;
}
ts.isJSDocPropertyTag = isJSDocPropertyTag;
function isJSDocPropertyLikeTag(node) {
return node.kind === 284 || node.kind === 279;
}
ts.isJSDocPropertyLikeTag = isJSDocPropertyLikeTag;
function isJSDocTypeLiteral(node) {
return node.kind === 285;
}
ts.isJSDocTypeLiteral = isJSDocTypeLiteral;
})(ts || (ts = {}));
(function (ts) {
function isSyntaxList(n) {
return n.kind === 286;
}
ts.isSyntaxList = isSyntaxList;
function isNode(node) {
return isNodeKind(node.kind);
}
ts.isNode = isNode;
function isNodeKind(kind) {
return kind >= 143;
}
ts.isNodeKind = isNodeKind;
function isToken(n) {
return n.kind >= 0 && n.kind <= 142;
}
ts.isToken = isToken;
function isNodeArray(array) {
return array.hasOwnProperty("pos") && array.hasOwnProperty("end");
}
ts.isNodeArray = isNodeArray;
function isLiteralKind(kind) {
return 8 <= kind && kind <= 13;
}
ts.isLiteralKind = isLiteralKind;
function isLiteralExpression(node) {
return isLiteralKind(node.kind);
}
ts.isLiteralExpression = isLiteralExpression;
function isTemplateLiteralKind(kind) {
return 13 <= kind && kind <= 16;
}
ts.isTemplateLiteralKind = isTemplateLiteralKind;
function isTemplateMiddleOrTemplateTail(node) {
var kind = node.kind;
return kind === 15
|| kind === 16;
}
ts.isTemplateMiddleOrTemplateTail = isTemplateMiddleOrTemplateTail;
function isStringTextContainingNode(node) {
switch (node.kind) {
case 9:
case 14:
case 15:
case 16:
case 13:
return true;
default:
return false;
}
}
ts.isStringTextContainingNode = isStringTextContainingNode;
function isGeneratedIdentifier(node) {
return ts.isIdentifier(node) && node.autoGenerateKind > 0;
}
ts.isGeneratedIdentifier = isGeneratedIdentifier;
function isModifierKind(token) {
switch (token) {
case 117:
case 120:
case 76:
case 124:
case 79:
case 84:
case 114:
case 112:
case 113:
case 131:
case 115:
return true;
}
return false;
}
ts.isModifierKind = isModifierKind;
function isModifier(node) {
return isModifierKind(node.kind);
}
ts.isModifier = isModifier;
function isEntityName(node) {
var kind = node.kind;
return kind === 143
|| kind === 71;
}
ts.isEntityName = isEntityName;
function isPropertyName(node) {
var kind = node.kind;
return kind === 71
|| kind === 9
|| kind === 8
|| kind === 144;
}
ts.isPropertyName = isPropertyName;
function isBindingName(node) {
var kind = node.kind;
return kind === 71
|| kind === 174
|| kind === 175;
}
ts.isBindingName = isBindingName;
function isFunctionLike(node) {
return node && isFunctionLikeKind(node.kind);
}
ts.isFunctionLike = isFunctionLike;
function isFunctionLikeDeclaration(node) {
return node && isFunctionLikeDeclarationKind(node.kind);
}
ts.isFunctionLikeDeclaration = isFunctionLikeDeclaration;
function isFunctionLikeDeclarationKind(kind) {
switch (kind) {
case 228:
case 151:
case 152:
case 153:
case 154:
case 186:
case 187:
return true;
default:
return false;
}
}
function isFunctionLikeKind(kind) {
switch (kind) {
case 150:
case 155:
case 156:
case 157:
case 160:
case 273:
case 161:
return true;
default:
return isFunctionLikeDeclarationKind(kind);
}
}
ts.isFunctionLikeKind = isFunctionLikeKind;
function isFunctionOrModuleBlock(node) {
return ts.isSourceFile(node) || ts.isModuleBlock(node) || ts.isBlock(node) && isFunctionLike(node.parent);
}
ts.isFunctionOrModuleBlock = isFunctionOrModuleBlock;
function isClassElement(node) {
var kind = node.kind;
return kind === 152
|| kind === 149
|| kind === 151
|| kind === 153
|| kind === 154
|| kind === 157
|| kind === 206
|| kind === 247;
}
ts.isClassElement = isClassElement;
function isClassLike(node) {
return node && (node.kind === 229 || node.kind === 199);
}
ts.isClassLike = isClassLike;
function isAccessor(node) {
return node && (node.kind === 153 || node.kind === 154);
}
ts.isAccessor = isAccessor;
function isTypeElement(node) {
var kind = node.kind;
return kind === 156
|| kind === 155
|| kind === 148
|| kind === 150
|| kind === 157
|| kind === 247;
}
ts.isTypeElement = isTypeElement;
function isObjectLiteralElementLike(node) {
var kind = node.kind;
return kind === 261
|| kind === 262
|| kind === 263
|| kind === 151
|| kind === 153
|| kind === 154
|| kind === 247;
}
ts.isObjectLiteralElementLike = isObjectLiteralElementLike;
function isTypeNodeKind(kind) {
return (kind >= 158 && kind <= 173)
|| kind === 119
|| kind === 133
|| kind === 134
|| kind === 122
|| kind === 136
|| kind === 137
|| kind === 99
|| kind === 105
|| kind === 139
|| kind === 95
|| kind === 130
|| kind === 201
|| kind === 268
|| kind === 269
|| kind === 270
|| kind === 271
|| kind === 272
|| kind === 273
|| kind === 274;
}
function isTypeNode(node) {
return isTypeNodeKind(node.kind);
}
ts.isTypeNode = isTypeNode;
function isFunctionOrConstructorTypeNode(node) {
switch (node.kind) {
case 160:
case 161:
return true;
}
return false;
}
ts.isFunctionOrConstructorTypeNode = isFunctionOrConstructorTypeNode;
function isBindingPattern(node) {
if (node) {
var kind = node.kind;
return kind === 175
|| kind === 174;
}
return false;
}
ts.isBindingPattern = isBindingPattern;
function isAssignmentPattern(node) {
var kind = node.kind;
return kind === 177
|| kind === 178;
}
ts.isAssignmentPattern = isAssignmentPattern;
function isArrayBindingElement(node) {
var kind = node.kind;
return kind === 176
|| kind === 200;
}
ts.isArrayBindingElement = isArrayBindingElement;
function isDeclarationBindingElement(bindingElement) {
switch (bindingElement.kind) {
case 226:
case 146:
case 176:
return true;
}
return false;
}
ts.isDeclarationBindingElement = isDeclarationBindingElement;
function isBindingOrAssignmentPattern(node) {
return isObjectBindingOrAssignmentPattern(node)
|| isArrayBindingOrAssignmentPattern(node);
}
ts.isBindingOrAssignmentPattern = isBindingOrAssignmentPattern;
function isObjectBindingOrAssignmentPattern(node) {
switch (node.kind) {
case 174:
case 178:
return true;
}
return false;
}
ts.isObjectBindingOrAssignmentPattern = isObjectBindingOrAssignmentPattern;
function isArrayBindingOrAssignmentPattern(node) {
switch (node.kind) {
case 175:
case 177:
return true;
}
return false;
}
ts.isArrayBindingOrAssignmentPattern = isArrayBindingOrAssignmentPattern;
function isPropertyAccessOrQualifiedName(node) {
var kind = node.kind;
return kind === 179
|| kind === 143;
}
ts.isPropertyAccessOrQualifiedName = isPropertyAccessOrQualifiedName;
function isCallLikeExpression(node) {
switch (node.kind) {
case 251:
case 250:
case 181:
case 182:
case 183:
case 147:
return true;
default:
return false;
}
}
ts.isCallLikeExpression = isCallLikeExpression;
function isCallOrNewExpression(node) {
return node.kind === 181 || node.kind === 182;
}
ts.isCallOrNewExpression = isCallOrNewExpression;
function isTemplateLiteral(node) {
var kind = node.kind;
return kind === 196
|| kind === 13;
}
ts.isTemplateLiteral = isTemplateLiteral;
function isLeftHandSideExpression(node) {
return isLeftHandSideExpressionKind(ts.skipPartiallyEmittedExpressions(node).kind);
}
ts.isLeftHandSideExpression = isLeftHandSideExpression;
function isLeftHandSideExpressionKind(kind) {
switch (kind) {
case 179:
case 180:
case 182:
case 181:
case 249:
case 250:
case 183:
case 177:
case 185:
case 178:
case 199:
case 186:
case 71:
case 12:
case 8:
case 9:
case 13:
case 196:
case 86:
case 95:
case 99:
case 101:
case 97:
case 203:
case 204:
case 91:
return true;
default:
return false;
}
}
function isUnaryExpression(node) {
return isUnaryExpressionKind(ts.skipPartiallyEmittedExpressions(node).kind);
}
ts.isUnaryExpression = isUnaryExpression;
function isUnaryExpressionKind(kind) {
switch (kind) {
case 192:
case 193:
case 188:
case 189:
case 190:
case 191:
case 184:
return true;
default:
return isLeftHandSideExpressionKind(kind);
}
}
function isUnaryExpressionWithWrite(expr) {
switch (expr.kind) {
case 193:
return true;
case 192:
return expr.operator === 43 ||
expr.operator === 44;
default:
return false;
}
}
ts.isUnaryExpressionWithWrite = isUnaryExpressionWithWrite;
function isExpression(node) {
return isExpressionKind(ts.skipPartiallyEmittedExpressions(node).kind);
}
ts.isExpression = isExpression;
function isExpressionKind(kind) {
switch (kind) {
case 195:
case 197:
case 187:
case 194:
case 198:
case 202:
case 200:
case 289:
case 288:
return true;
default:
return isUnaryExpressionKind(kind);
}
}
function isAssertionExpression(node) {
var kind = node.kind;
return kind === 184
|| kind === 202;
}
ts.isAssertionExpression = isAssertionExpression;
function isPartiallyEmittedExpression(node) {
return node.kind === 288;
}
ts.isPartiallyEmittedExpression = isPartiallyEmittedExpression;
function isNotEmittedStatement(node) {
return node.kind === 287;
}
ts.isNotEmittedStatement = isNotEmittedStatement;
function isNotEmittedOrPartiallyEmittedNode(node) {
return isNotEmittedStatement(node)
|| isPartiallyEmittedExpression(node);
}
ts.isNotEmittedOrPartiallyEmittedNode = isNotEmittedOrPartiallyEmittedNode;
function isIterationStatement(node, lookInLabeledStatements) {
switch (node.kind) {
case 214:
case 215:
case 216:
case 212:
case 213:
return true;
case 222:
return lookInLabeledStatements && isIterationStatement(node.statement, lookInLabeledStatements);
}
return false;
}
ts.isIterationStatement = isIterationStatement;
function isForInOrOfStatement(node) {
return node.kind === 215 || node.kind === 216;
}
ts.isForInOrOfStatement = isForInOrOfStatement;
function isConciseBody(node) {
return ts.isBlock(node)
|| isExpression(node);
}
ts.isConciseBody = isConciseBody;
function isFunctionBody(node) {
return ts.isBlock(node);
}
ts.isFunctionBody = isFunctionBody;
function isForInitializer(node) {
return ts.isVariableDeclarationList(node)
|| isExpression(node);
}
ts.isForInitializer = isForInitializer;
function isModuleBody(node) {
var kind = node.kind;
return kind === 234
|| kind === 233
|| kind === 71;
}
ts.isModuleBody = isModuleBody;
function isNamespaceBody(node) {
var kind = node.kind;
return kind === 234
|| kind === 233;
}
ts.isNamespaceBody = isNamespaceBody;
function isJSDocNamespaceBody(node) {
var kind = node.kind;
return kind === 71
|| kind === 233;
}
ts.isJSDocNamespaceBody = isJSDocNamespaceBody;
function isNamedImportBindings(node) {
var kind = node.kind;
return kind === 241
|| kind === 240;
}
ts.isNamedImportBindings = isNamedImportBindings;
function isModuleOrEnumDeclaration(node) {
return node.kind === 233 || node.kind === 232;
}
ts.isModuleOrEnumDeclaration = isModuleOrEnumDeclaration;
function isDeclarationKind(kind) {
return kind === 187
|| kind === 176
|| kind === 229
|| kind === 199
|| kind === 152
|| kind === 232
|| kind === 264
|| kind === 246
|| kind === 228
|| kind === 186
|| kind === 153
|| kind === 239
|| kind === 237
|| kind === 242
|| kind === 230
|| kind === 253
|| kind === 151
|| kind === 150
|| kind === 233
|| kind === 236
|| kind === 240
|| kind === 146
|| kind === 261
|| kind === 149
|| kind === 148
|| kind === 154
|| kind === 262
|| kind === 231
|| kind === 145
|| kind === 226
|| kind === 283;
}
function isDeclarationStatementKind(kind) {
return kind === 228
|| kind === 247
|| kind === 229
|| kind === 230
|| kind === 231
|| kind === 232
|| kind === 233
|| kind === 238
|| kind === 237
|| kind === 244
|| kind === 243
|| kind === 236;
}
function isStatementKindButNotDeclarationKind(kind) {
return kind === 218
|| kind === 217
|| kind === 225
|| kind === 212
|| kind === 210
|| kind === 209
|| kind === 215
|| kind === 216
|| kind === 214
|| kind === 211
|| kind === 222
|| kind === 219
|| kind === 221
|| kind === 223
|| kind === 224
|| kind === 208
|| kind === 213
|| kind === 220
|| kind === 287
|| kind === 291
|| kind === 290;
}
function isDeclaration(node) {
if (node.kind === 145) {
return node.parent.kind !== 282 || ts.isInJavaScriptFile(node);
}
return isDeclarationKind(node.kind);
}
ts.isDeclaration = isDeclaration;
function isDeclarationStatement(node) {
return isDeclarationStatementKind(node.kind);
}
ts.isDeclarationStatement = isDeclarationStatement;
function isStatementButNotDeclaration(node) {
return isStatementKindButNotDeclarationKind(node.kind);
}
ts.isStatementButNotDeclaration = isStatementButNotDeclaration;
function isStatement(node) {
var kind = node.kind;
return isStatementKindButNotDeclarationKind(kind)
|| isDeclarationStatementKind(kind)
|| isBlockStatement(node);
}
ts.isStatement = isStatement;
function isBlockStatement(node) {
if (node.kind !== 207)
return false;
if (node.parent !== undefined) {
if (node.parent.kind === 224 || node.parent.kind === 260) {
return false;
}
}
return !ts.isFunctionBlock(node);
}
function isModuleReference(node) {
var kind = node.kind;
return kind === 248
|| kind === 143
|| kind === 71;
}
ts.isModuleReference = isModuleReference;
function isJsxTagNameExpression(node) {
var kind = node.kind;
return kind === 99
|| kind === 71
|| kind === 179;
}
ts.isJsxTagNameExpression = isJsxTagNameExpression;
function isJsxChild(node) {
var kind = node.kind;
return kind === 249
|| kind === 256
|| kind === 250
|| kind === 10;
}
ts.isJsxChild = isJsxChild;
function isJsxAttributeLike(node) {
var kind = node.kind;
return kind === 253
|| kind === 255;
}
ts.isJsxAttributeLike = isJsxAttributeLike;
function isStringLiteralOrJsxExpression(node) {
var kind = node.kind;
return kind === 9
|| kind === 256;
}
ts.isStringLiteralOrJsxExpression = isStringLiteralOrJsxExpression;
function isJsxOpeningLikeElement(node) {
var kind = node.kind;
return kind === 251
|| kind === 250;
}
ts.isJsxOpeningLikeElement = isJsxOpeningLikeElement;
function isCaseOrDefaultClause(node) {
var kind = node.kind;
return kind === 257
|| kind === 258;
}
ts.isCaseOrDefaultClause = isCaseOrDefaultClause;
function isJSDocNode(node) {
return node.kind >= 267 && node.kind <= 285;
}
ts.isJSDocNode = isJSDocNode;
function isJSDocCommentContainingNode(node) {
return node.kind === 275 || isJSDocTag(node);
}
ts.isJSDocCommentContainingNode = isJSDocCommentContainingNode;
function isJSDocTag(node) {
return node.kind >= 276 && node.kind <= 285;
}
ts.isJSDocTag = isJSDocTag;
function isSetAccessor(node) {
return node.kind === 154;
}
ts.isSetAccessor = isSetAccessor;
function isGetAccessor(node) {
return node.kind === 153;
}
ts.isGetAccessor = isGetAccessor;
function hasJSDocNodes(node) {
return !!node.jsDoc && node.jsDoc.length > 0;
}
ts.hasJSDocNodes = hasJSDocNodes;
})(ts || (ts = {}));
var ts;
(function (ts) {
var NodeConstructor;
var TokenConstructor;
var IdentifierConstructor;
var SourceFileConstructor;
function createNode(kind, pos, end) {
if (kind === 265) {
return new (SourceFileConstructor || (SourceFileConstructor = ts.objectAllocator.getSourceFileConstructor()))(kind, pos, end);
}
else if (kind === 71) {
return new (IdentifierConstructor || (IdentifierConstructor = ts.objectAllocator.getIdentifierConstructor()))(kind, pos, end);
}
else if (!ts.isNodeKind(kind)) {
return new (TokenConstructor || (TokenConstructor = ts.objectAllocator.getTokenConstructor()))(kind, pos, end);
}
else {
return new (NodeConstructor || (NodeConstructor = ts.objectAllocator.getNodeConstructor()))(kind, pos, end);
}
}
ts.createNode = createNode;
function visitNode(cbNode, node) {
return node && cbNode(node);
}
function visitNodes(cbNode, cbNodes, nodes) {
if (nodes) {
if (cbNodes) {
return cbNodes(nodes);
}
for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {
var node = nodes_1[_i];
var result = cbNode(node);
if (result) {
return result;
}
}
}
}
function forEachChild(node, cbNode, cbNodes) {
if (!node || node.kind <= 142) {
return;
}
switch (node.kind) {
case 143:
return visitNode(cbNode, node.left) ||
visitNode(cbNode, node.right);
case 145:
return visitNode(cbNode, node.name) ||
visitNode(cbNode, node.constraint) ||
visitNode(cbNode, node.default) ||
visitNode(cbNode, node.expression);
case 262:
return visitNodes(cbNode, cbNodes, node.decorators) ||
visitNodes(cbNode, cbNodes, node.modifiers) ||
visitNode(cbNode, node.name) ||
visitNode(cbNode, node.questionToken) ||
visitNode(cbNode, node.equalsToken) ||
visitNode(cbNode, node.objectAssignmentInitializer);
case 263:
return visitNode(cbNode, node.expression);
case 146:
case 149:
case 148:
case 261:
case 226:
case 176:
return visitNodes(cbNode, cbNodes, node.decorators) ||
visitNodes(cbNode, 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 160:
case 161:
case 155:
case 156:
case 157:
return visitNodes(cbNode, cbNodes, node.decorators) ||
visitNodes(cbNode, cbNodes, node.modifiers) ||
visitNodes(cbNode, cbNodes, node.typeParameters) ||
visitNodes(cbNode, cbNodes, node.parameters) ||
visitNode(cbNode, node.type);
case 151:
case 150:
case 152:
case 153:
case 154:
case 186:
case 228:
case 187:
return visitNodes(cbNode, cbNodes, node.decorators) ||
visitNodes(cbNode, cbNodes, node.modifiers) ||
visitNode(cbNode, node.asteriskToken) ||
visitNode(cbNode, node.name) ||
visitNode(cbNode, node.questionToken) ||
visitNodes(cbNode, cbNodes, node.typeParameters) ||
visitNodes(cbNode, cbNodes, node.parameters) ||
visitNode(cbNode, node.type) ||
visitNode(cbNode, node.equalsGreaterThanToken) ||
visitNode(cbNode, node.body);
case 159:
return visitNode(cbNode, node.typeName) ||
visitNodes(cbNode, cbNodes, node.typeArguments);
case 158:
return visitNode(cbNode, node.parameterName) ||
visitNode(cbNode, node.type);
case 162:
return visitNode(cbNode, node.exprName);
case 163:
return visitNodes(cbNode, cbNodes, node.members);
case 164:
return visitNode(cbNode, node.elementType);
case 165:
return visitNodes(cbNode, cbNodes, node.elementTypes);
case 166:
case 167:
return visitNodes(cbNode, cbNodes, node.types);
case 168:
case 170:
return visitNode(cbNode, node.type);
case 171:
return visitNode(cbNode, node.objectType) ||
visitNode(cbNode, node.indexType);
case 172:
return visitNode(cbNode, node.readonlyToken) ||
visitNode(cbNode, node.typeParameter) ||
visitNode(cbNode, node.questionToken) ||
visitNode(cbNode, node.type);
case 173:
return visitNode(cbNode, node.literal);
case 174:
case 175:
return visitNodes(cbNode, cbNodes, node.elements);
case 177:
return visitNodes(cbNode, cbNodes, node.elements);
case 178:
return visitNodes(cbNode, cbNodes, node.properties);
case 179:
return visitNode(cbNode, node.expression) ||
visitNode(cbNode, node.name);
case 180:
return visitNode(cbNode, node.expression) ||
visitNode(cbNode, node.argumentExpression);
case 181:
case 182:
return visitNode(cbNode, node.expression) ||
visitNodes(cbNode, cbNodes, node.typeArguments) ||
visitNodes(cbNode, cbNodes, node.arguments);
case 183:
return visitNode(cbNode, node.tag) ||
visitNode(cbNode, node.template);
case 184:
return visitNode(cbNode, node.type) ||
visitNode(cbNode, node.expression);
case 185:
return visitNode(cbNode, node.expression);
case 188:
return visitNode(cbNode, node.expression);
case 189:
return visitNode(cbNode, node.expression);
case 190:
return visitNode(cbNode, node.expression);
case 192:
return visitNode(cbNode, node.operand);
case 197:
return visitNode(cbNode, node.asteriskToken) ||
visitNode(cbNode, node.expression);
case 191:
return visitNode(cbNode, node.expression);
case 193:
return visitNode(cbNode, node.operand);
case 194:
return visitNode(cbNode, node.left) ||
visitNode(cbNode, node.operatorToken) ||
visitNode(cbNode, node.right);
case 202:
return visitNode(cbNode, node.expression) ||
visitNode(cbNode, node.type);
case 203:
return visitNode(cbNode, node.expression);
case 204:
return visitNode(cbNode, node.name);
case 195:
return visitNode(cbNode, node.condition) ||
visitNode(cbNode, node.questionToken) ||
visitNode(cbNode, node.whenTrue) ||
visitNode(cbNode, node.colonToken) ||
visitNode(cbNode, node.whenFalse);
case 198:
return visitNode(cbNode, node.expression);
case 207:
case 234:
return visitNodes(cbNode, cbNodes, node.statements);
case 265:
return visitNodes(cbNode, cbNodes, node.statements) ||
visitNode(cbNode, node.endOfFileToken);
case 208:
return visitNodes(cbNode, cbNodes, node.decorators) ||
visitNodes(cbNode, cbNodes, node.modifiers) ||
visitNode(cbNode, node.declarationList);
case 227:
return visitNodes(cbNode, cbNodes, node.declarations);
case 210:
return visitNode(cbNode, node.expression);
case 211:
return visitNode(cbNode, node.expression) ||
visitNode(cbNode, node.thenStatement) ||
visitNode(cbNode, node.elseStatement);
case 212:
return visitNode(cbNode, node.statement) ||
visitNode(cbNode, node.expression);
case 213:
return visitNode(cbNode, node.expression) ||
visitNode(cbNode, node.statement);
case 214:
return visitNode(cbNode, node.initializer) ||
visitNode(cbNode, node.condition) ||
visitNode(cbNode, node.incrementor) ||
visitNode(cbNode, node.statement);
case 215:
return visitNode(cbNode, node.initializer) ||
visitNode(cbNode, node.expression) ||
visitNode(cbNode, node.statement);
case 216:
return visitNode(cbNode, node.awaitModifier) ||
visitNode(cbNode, node.initializer) ||
visitNode(cbNode, node.expression) ||
visitNode(cbNode, node.statement);
case 217:
case 218:
return visitNode(cbNode, node.label);
case 219:
return visitNode(cbNode, node.expression);
case 220:
return visitNode(cbNode, node.expression) ||
visitNode(cbNode, node.statement);
case 221:
return visitNode(cbNode, node.expression) ||
visitNode(cbNode, node.caseBlock);
case 235:
return visitNodes(cbNode, cbNodes, node.clauses);
case 257:
return visitNode(cbNode, node.expression) ||
visitNodes(cbNode, cbNodes, node.statements);
case 258:
return visitNodes(cbNode, cbNodes, node.statements);
case 222:
return visitNode(cbNode, node.label) ||
visitNode(cbNode, node.statement);
case 223:
return visitNode(cbNode, node.expression);
case 224:
return visitNode(cbNode, node.tryBlock) ||
visitNode(cbNode, node.catchClause) ||
visitNode(cbNode, node.finallyBlock);
case 260:
return visitNode(cbNode, node.variableDeclaration) ||
visitNode(cbNode, node.block);
case 147:
return visitNode(cbNode, node.expression);
case 229:
case 199:
return visitNodes(cbNode, cbNodes, node.decorators) ||
visitNodes(cbNode, cbNodes, node.modifiers) ||
visitNode(cbNode, node.name) ||
visitNodes(cbNode, cbNodes, node.typeParameters) ||
visitNodes(cbNode, cbNodes, node.heritageClauses) ||
visitNodes(cbNode, cbNodes, node.members);
case 230:
return visitNodes(cbNode, cbNodes, node.decorators) ||
visitNodes(cbNode, cbNodes, node.modifiers) ||
visitNode(cbNode, node.name) ||
visitNodes(cbNode, cbNodes, node.typeParameters) ||
visitNodes(cbNode, cbNodes, node.heritageClauses) ||
visitNodes(cbNode, cbNodes, node.members);
case 231:
return visitNodes(cbNode, cbNodes, node.decorators) ||
visitNodes(cbNode, cbNodes, node.modifiers) ||
visitNode(cbNode, node.name) ||
visitNodes(cbNode, cbNodes, node.typeParameters) ||
visitNode(cbNode, node.type);
case 232:
return visitNodes(cbNode, cbNodes, node.decorators) ||
visitNodes(cbNode, cbNodes, node.modifiers) ||
visitNode(cbNode, node.name) ||
visitNodes(cbNode, cbNodes, node.members);
case 264:
return visitNode(cbNode, node.name) ||
visitNode(cbNode, node.initializer);
case 233:
return visitNodes(cbNode, cbNodes, node.decorators) ||
visitNodes(cbNode, cbNodes, node.modifiers) ||
visitNode(cbNode, node.name) ||
visitNode(cbNode, node.body);
case 237:
return visitNodes(cbNode, cbNodes, node.decorators) ||
visitNodes(cbNode, cbNodes, node.modifiers) ||
visitNode(cbNode, node.name) ||
visitNode(cbNode, node.moduleReference);
case 238:
return visitNodes(cbNode, cbNodes, node.decorators) ||
visitNodes(cbNode, cbNodes, node.modifiers) ||
visitNode(cbNode, node.importClause) ||
visitNode(cbNode, node.moduleSpecifier);
case 239:
return visitNode(cbNode, node.name) ||
visitNode(cbNode, node.namedBindings);
case 236:
return visitNode(cbNode, node.name);
case 240:
return visitNode(cbNode, node.name);
case 241:
case 245:
return visitNodes(cbNode, cbNodes, node.elements);
case 244:
return visitNodes(cbNode, cbNodes, node.decorators) ||
visitNodes(cbNode, cbNodes, node.modifiers) ||
visitNode(cbNode, node.exportClause) ||
visitNode(cbNode, node.moduleSpecifier);
case 242:
case 246:
return visitNode(cbNode, node.propertyName) ||
visitNode(cbNode, node.name);
case 243:
return visitNodes(cbNode, cbNodes, node.decorators) ||
visitNodes(cbNode, cbNodes, node.modifiers) ||
visitNode(cbNode, node.expression);
case 196:
return visitNode(cbNode, node.head) || visitNodes(cbNode, cbNodes, node.templateSpans);
case 205:
return visitNode(cbNode, node.expression) || visitNode(cbNode, node.literal);
case 144:
return visitNode(cbNode, node.expression);
case 259:
return visitNodes(cbNode, cbNodes, node.types);
case 201:
return visitNode(cbNode, node.expression) ||
visitNodes(cbNode, cbNodes, node.typeArguments);
case 248:
return visitNode(cbNode, node.expression);
case 247:
return visitNodes(cbNode, cbNodes, node.decorators);
case 289:
return visitNodes(cbNode, cbNodes, node.elements);
case 249:
return visitNode(cbNode, node.openingElement) ||
visitNodes(cbNode, cbNodes, node.children) ||
visitNode(cbNode, node.closingElement);
case 250:
case 251:
return visitNode(cbNode, node.tagName) ||
visitNode(cbNode, node.attributes);
case 254:
return visitNodes(cbNode, cbNodes, node.properties);
case 253:
return visitNode(cbNode, node.name) ||
visitNode(cbNode, node.initializer);
case 255:
return visitNode(cbNode, node.expression);
case 256:
return visitNode(cbNode, node.dotDotDotToken) ||
visitNode(cbNode, node.expression);
case 252:
return visitNode(cbNode, node.tagName);
case 267:
return visitNode(cbNode, node.type);
case 271:
return visitNode(cbNode, node.type);
case 270:
return visitNode(cbNode, node.type);
case 272:
return visitNode(cbNode, node.type);
case 273:
return visitNodes(cbNode, cbNodes, node.parameters) ||
visitNode(cbNode, node.type);
case 274:
return visitNode(cbNode, node.type);
case 275:
return visitNodes(cbNode, cbNodes, node.tags);
case 279:
case 284:
if (node.isNameFirst) {
return visitNode(cbNode, node.name) ||
visitNode(cbNode, node.typeExpression);
}
else {
return visitNode(cbNode, node.typeExpression) ||
visitNode(cbNode, node.name);
}
case 280:
return visitNode(cbNode, node.typeExpression);
case 281:
return visitNode(cbNode, node.typeExpression);
case 277:
return visitNode(cbNode, node.class);
case 282:
return visitNodes(cbNode, cbNodes, node.typeParameters);
case 283:
if (node.typeExpression &&
node.typeExpression.kind === 267) {
return visitNode(cbNode, node.typeExpression) ||
visitNode(cbNode, node.fullName);
}
else {
return visitNode(cbNode, node.fullName) ||
visitNode(cbNode, node.typeExpression);
}
case 285:
if (node.jsDocPropertyTags) {
for (var _i = 0, _a = node.jsDocPropertyTags; _i < _a.length; _i++) {
var tag = _a[_i];
visitNode(cbNode, tag);
}
}
return;
case 288:
return visitNode(cbNode, node.expression);
}
}
ts.forEachChild = forEachChild;
function createSourceFile(fileName, sourceText, languageVersion, setParentNodes, scriptKind) {
if (setParentNodes === void 0) { setParentNodes = false; }
ts.performance.mark("beforeParse");
var result = Parser.parseSourceFile(fileName, sourceText, languageVersion, undefined, setParentNodes, scriptKind);
ts.performance.mark("afterParse");
ts.performance.measure("Parse", "beforeParse", "afterParse");
return result;
}
ts.createSourceFile = createSourceFile;
function parseIsolatedEntityName(text, languageVersion) {
return Parser.parseIsolatedEntityName(text, languageVersion);
}
ts.parseIsolatedEntityName = parseIsolatedEntityName;
function parseJsonText(fileName, sourceText) {
return Parser.parseJsonText(fileName, sourceText);
}
ts.parseJsonText = parseJsonText;
function isExternalModule(file) {
return file.externalModuleIndicator !== undefined;
}
ts.isExternalModule = isExternalModule;
function updateSourceFile(sourceFile, newText, textChangeRange, aggressiveChecks) {
var newSourceFile = IncrementalParser.updateSourceFile(sourceFile, newText, textChangeRange, aggressiveChecks);
newSourceFile.flags |= (sourceFile.flags & 524288);
return newSourceFile;
}
ts.updateSourceFile = updateSourceFile;
function parseIsolatedJSDocComment(content, start, length) {
var result = Parser.JSDocParser.parseIsolatedJSDocComment(content, start, length);
if (result && result.jsDoc) {
Parser.fixupParentReferences(result.jsDoc);
}
return result;
}
ts.parseIsolatedJSDocComment = parseIsolatedJSDocComment;
function parseJSDocTypeExpressionForTests(content, start, length) {
return Parser.JSDocParser.parseJSDocTypeExpressionForTests(content, start, length);
}
ts.parseJSDocTypeExpressionForTests = parseJSDocTypeExpressionForTests;
var Parser;
(function (Parser) {
var scanner = ts.createScanner(5, true);
var disallowInAndDecoratorContext = 2048 | 8192;
var NodeConstructor;
var TokenConstructor;
var IdentifierConstructor;
var SourceFileConstructor;
var sourceFile;
var parseDiagnostics;
var syntaxCursor;
var currentToken;
var sourceText;
var nodeCount;
var identifiers;
var identifierCount;
var parsingContext;
var contextFlags;
var parseErrorBeforeNextFinishedNode = false;
function parseSourceFile(fileName, sourceText, languageVersion, syntaxCursor, setParentNodes, scriptKind) {
scriptKind = ts.ensureScriptKind(fileName, scriptKind);
initializeState(sourceText, languageVersion, syntaxCursor, scriptKind);
var result = parseSourceFileWorker(fileName, languageVersion, setParentNodes, scriptKind);
clearState();
return result;
}
Parser.parseSourceFile = parseSourceFile;
function parseIsolatedEntityName(content, languageVersion) {
initializeState(content, languageVersion, undefined, 1);
nextToken();
var entityName = parseEntityName(true);
var isInvalid = token() === 1 && !parseDiagnostics.length;
clearState();
return isInvalid ? entityName : undefined;
}
Parser.parseIsolatedEntityName = parseIsolatedEntityName;
function parseJsonText(fileName, sourceText) {
initializeState(sourceText, 2, undefined, 6);
sourceFile = createSourceFile(fileName, 2, 6);
var result = sourceFile;
nextToken();
if (token() === 1) {
sourceFile.endOfFileToken = parseTokenNode();
}
else if (token() === 17 ||
lookAhead(function () { return token() === 9; })) {
result.jsonObject = parseObjectLiteralExpression();
sourceFile.endOfFileToken = parseExpectedToken(1, false, ts.Diagnostics.Unexpected_token);
}
else {
parseExpected(17);
}
sourceFile.parseDiagnostics = parseDiagnostics;
clearState();
return result;
}
Parser.parseJsonText = parseJsonText;
function getLanguageVariant(scriptKind) {
return scriptKind === 4 || scriptKind === 2 || scriptKind === 1 || scriptKind === 6 ? 1 : 0;
}
function initializeState(_sourceText, languageVersion, _syntaxCursor, scriptKind) {
NodeConstructor = ts.objectAllocator.getNodeConstructor();
TokenConstructor = ts.objectAllocator.getTokenConstructor();
IdentifierConstructor = ts.objectAllocator.getIdentifierConstructor();
SourceFileConstructor = ts.objectAllocator.getSourceFileConstructor();
sourceText = _sourceText;
syntaxCursor = _syntaxCursor;
parseDiagnostics = [];
parsingContext = 0;
identifiers = ts.createMap();
identifierCount = 0;
nodeCount = 0;
contextFlags = scriptKind === 1 || scriptKind === 2 || scriptKind === 6 ? 65536 : 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;
nextToken();
processReferenceComments(sourceFile);
sourceFile.statements = parseList(0, parseStatement);
ts.Debug.assert(token() === 1);
sourceFile.endOfFileToken = addJSDocComment(parseTokenNode());
setExternalModuleIndicator(sourceFile);
sourceFile.nodeCount = nodeCount;
sourceFile.identifierCount = identifierCount;
sourceFile.identifiers = identifiers;
sourceFile.parseDiagnostics = parseDiagnostics;
if (setParentNodes) {
fixupParentReferences(sourceFile);
}
return sourceFile;
}
function addJSDocComment(node) {
var comments = ts.getJSDocCommentRanges(node, sourceFile.text);
if (comments) {
for (var _i = 0, comments_2 = comments; _i < comments_2.length; _i++) {
var comment = comments_2[_i];
var jsDoc = JSDocParser.parseJSDocComment(node, comment.pos, comment.end - comment.pos);
if (!jsDoc) {
continue;
}
if (!node.jsDoc) {
node.jsDoc = [];
}
node.jsDoc.push(jsDoc);
}
}
return node;
}
function fixupParentReferences(rootNode) {
var parent = rootNode;
forEachChild(rootNode, visitNode);
return;
function visitNode(n) {
if (n.parent !== parent) {
n.parent = parent;
var saveParent = parent;
parent = n;
forEachChild(n, visitNode);
if (ts.hasJSDocNodes(n)) {
for (var _i = 0, _a = n.jsDoc; _i < _a.length; _i++) {
var jsDoc = _a[_i];
jsDoc.parent = n;
parent = jsDoc;
forEachChild(jsDoc, visitNode);
}
}
parent = saveParent;
}
}
}
Parser.fixupParentReferences = fixupParentReferences;
function createSourceFile(fileName, languageVersion, scriptKind) {
var sourceFile = new SourceFileConstructor(265, 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, 2048);
}
function setYieldContext(val) {
setContextFlag(val, 4096);
}
function setDecoratorContext(val) {
setContextFlag(val, 8192);
}
function setAwaitContext(val) {
setContextFlag(val, 16384);
}
function doOutsideOfContext(context, func) {
var contextFlagsToClear = context & contextFlags;
if (contextFlagsToClear) {
setContextFlag(false, contextFlagsToClear);
var result = func();
setContextFlag(true, contextFlagsToClear);
return result;
}
return func();
}
function doInsideOfContext(context, func) {
var contextFlagsToSet = context & ~contextFlags;
if (contextFlagsToSet) {
setContextFlag(true, contextFlagsToSet);
var result = func();
setContextFlag(false, contextFlagsToSet);
return result;
}
return func();
}
function allowInAnd(func) {
return doOutsideOfContext(2048, func);
}
function disallowInAnd(func) {
return doInsideOfContext(2048, func);
}
function doInYieldContext(func) {
return doInsideOfContext(4096, func);
}
function doInDecoratorContext(func) {
return doInsideOfContext(8192, func);
}
function doInAwaitContext(func) {
return doInsideOfContext(16384, func);
}
function doOutsideOfAwaitContext(func) {
return doOutsideOfContext(16384, func);
}
function doInYieldAndAwaitContext(func) {
return doInsideOfContext(4096 | 16384, func);
}
function inContext(flags) {
return (contextFlags & flags) !== 0;
}
function inYieldContext() {
return inContext(4096);
}
function inDisallowInContext() {
return inContext(2048);
}
function inDecoratorContext() {
return inContext(8192);
}
function inAwaitContext() {
return inContext(16384);
}
function parseErrorAtCurrentToken(message, arg0) {
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 token() {
return currentToken;
}
function nextToken() {
return currentToken = scanner.scan();
}
function reScanGreaterToken() {
return currentToken = scanner.reScanGreaterToken();
}
function reScanSlashToken() {
return currentToken = scanner.reScanSlashToken();
}
function reScanTemplateToken() {
return currentToken = scanner.reScanTemplateToken();
}
function scanJsxIdentifier() {
return currentToken = scanner.scanJsxIdentifier();
}
function scanJsxText() {
return currentToken = scanner.scanJsxToken();
}
function scanJsxAttributeValue() {
return currentToken = scanner.scanJsxAttributeValue();
}
function speculationHelper(callback, isLookAhead) {
var saveToken = currentToken;
var saveParseDiagnosticsLength = parseDiagnostics.length;
var saveParseErrorBeforeNextFinishedNode = parseErrorBeforeNextFinishedNode;
var saveContextFlags = contextFlags;
var result = isLookAhead
? scanner.lookAhead(callback)
: scanner.tryScan(callback);
ts.Debug.assert(saveContextFlags === contextFlags);
if (!result || isLookAhead) {
currentToken = saveToken;
parseDiagnostics.length = saveParseDiagnosticsLength;
parseErrorBeforeNextFinishedNode = saveParseErrorBeforeNextFinishedNode;
}
return result;
}
function lookAhead(callback) {
return speculationHelper(callback, true);
}
function tryParse(callback) {
return speculationHelper(callback, false);
}
function isIdentifier() {
if (token() === 71) {
return true;
}
if (token() === 116 && inYieldContext()) {
return false;
}
if (token() === 121 && inAwaitContext()) {
return false;
}
return token() > 107;
}
function parseExpected(kind, diagnosticMessage, shouldAdvance) {
if (shouldAdvance === void 0) { shouldAdvance = true; }
if (token() === kind) {
if (shouldAdvance) {
nextToken();
}
return true;
}
if (diagnosticMessage) {
parseErrorAtCurrentToken(diagnosticMessage);
}
else {
parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(kind));
}
return false;
}
function parseOptional(t) {
if (token() === t) {
nextToken();
return true;
}
return false;
}
function parseOptionalToken(t) {
if (token() === t) {
return parseTokenNode();
}
return undefined;
}
function parseExpectedToken(t, 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() === 25) {
return true;
}
return token() === 18 || token() === 1 || scanner.hasPrecedingLineBreak();
}
function parseSemicolon() {
if (canParseSemicolon()) {
if (token() === 25) {
nextToken();
}
return true;
}
else {
return parseExpected(25);
}
}
function createNode(kind, pos) {
nodeCount++;
if (!(pos >= 0)) {
pos = scanner.getStartPos();
}
return ts.isNodeKind(kind) ? new NodeConstructor(kind, pos, pos) :
kind === 71 ? new IdentifierConstructor(kind, pos, pos) :
new TokenConstructor(kind, pos, pos);
}
function createNodeArray(elements, pos, end) {
var length = elements.length;
var array = (length >= 1 && length <= 4 ? elements.slice() : elements);
array.pos = pos;
array.end = end === undefined ? scanner.getStartPos() : end;
return array;
}
function finishNode(node, end) {
node.end = end === undefined ? scanner.getStartPos() : end;
if (contextFlags) {
node.flags |= contextFlags;
}
if (parseErrorBeforeNextFinishedNode) {
parseErrorBeforeNextFinishedNode = false;
node.flags |= 32768;
}
return node;
}
function createMissingNode(kind, reportAtCurrentPosition, diagnosticMessage, arg0) {
if (reportAtCurrentPosition) {
parseErrorAtPosition(scanner.getStartPos(), 0, diagnosticMessage, arg0);
}
else {
parseErrorAtCurrentToken(diagnosticMessage, arg0);
}
var result = createNode(kind, scanner.getStartPos());
if (kind === 71) {
result.escapedText = "";
}
else if (ts.isLiteralKind(kind) || ts.isTemplateLiteralKind(kind)) {
result.text = "";
}
return finishNode(result);
}
function internIdentifier(text) {
var identifier = identifiers.get(text);
if (identifier === undefined) {
identifiers.set(text, identifier = text);
}
return identifier;
}
function createIdentifier(isIdentifier, diagnosticMessage) {
identifierCount++;
if (isIdentifier) {
var node = createNode(71);
if (token() !== 71) {
node.originalKeywordKind = token();
}
node.escapedText = ts.escapeLeadingUnderscores(internIdentifier(scanner.getTokenValue()));
nextToken();
return finishNode(node);
}
var reportAtCurrentPosition = token() === 1;
return createMissingNode(71, reportAtCurrentPosition, diagnosticMessage || ts.Diagnostics.Identifier_expected);
}
function parseIdentifier(diagnosticMessage) {
return createIdentifier(isIdentifier(), diagnosticMessage);
}
function parseIdentifierName(diagnosticMessage) {
return createIdentifier(ts.tokenIsIdentifierOrKeyword(token()), diagnosticMessage);
}
function isLiteralPropertyName() {
return ts.tokenIsIdentifierOrKeyword(token()) ||
token() === 9 ||
token() === 8;
}
function parsePropertyNameWorker(allowComputedPropertyNames) {
if (token() === 9 || token() === 8) {
var node = parseLiteralNode();
node.text = internIdentifier(node.text);
return node;
}
if (allowComputedPropertyNames && token() === 21) {
return parseComputedPropertyName();
}
return parseIdentifierName();
}
function parsePropertyName() {
return parsePropertyNameWorker(true);
}
function parseComputedPropertyName() {
var node = createNode(144);
parseExpected(21);
node.expression = allowInAnd(parseExpression);
parseExpected(22);
return finishNode(node);
}
function parseContextualModifier(t) {
return token() === t && tryParse(nextTokenCanFollowModifier);
}
function nextTokenIsOnSameLineAndCanFollowModifier() {
nextToken();
if (scanner.hasPrecedingLineBreak()) {
return false;
}
return canFollowModifier();
}
function nextTokenCanFollowModifier() {
if (token() === 76) {
return nextToken() === 83;
}
if (token() === 84) {
nextToken();
if (token() === 79) {
return lookAhead(nextTokenCanFollowDefaultKeyword);
}
return token() !== 39 && token() !== 118 && token() !== 17 && canFollowModifier();
}
if (token() === 79) {
return nextTokenCanFollowDefaultKeyword();
}
if (token() === 115) {
nextToken();
return canFollowModifier();
}
return nextTokenIsOnSameLineAndCanFollowModifier();
}
function parseAnyContextualModifier() {
return ts.isModifierKind(token()) && tryParse(nextTokenCanFollowModifier);
}
function canFollowModifier() {
return token() === 21
|| token() === 17
|| token() === 39
|| token() === 24
|| isLiteralPropertyName();
}
function nextTokenCanFollowDefaultKeyword() {
nextToken();
return token() === 75 || token() === 89 ||
token() === 109 ||
(token() === 117 && lookAhead(nextTokenIsClassKeywordOnSameLine)) ||
(token() === 120 && lookAhead(nextTokenIsFunctionKeywordOnSameLine));
}
function isListElement(parsingContext, inErrorRecovery) {
var node = currentNode(parsingContext);
if (node) {
return true;
}
switch (parsingContext) {
case 0:
case 1:
case 3:
return !(token() === 25 && inErrorRecovery) && isStartOfStatement();
case 2:
return token() === 73 || token() === 79;
case 4:
return lookAhead(isTypeMemberStart);
case 5:
return lookAhead(isClassMemberStart) || (token() === 25 && !inErrorRecovery);
case 6:
return token() === 21 || isLiteralPropertyName();
case 12:
return token() === 21 || token() === 39 || token() === 24 || isLiteralPropertyName();
case 17:
return isLiteralPropertyName();
case 9:
return token() === 21 || token() === 24 || isLiteralPropertyName();
case 7:
if (token() === 17) {
return lookAhead(isValidHeritageClauseObjectLiteral);
}
if (!inErrorRecovery) {
return isStartOfLeftHandSideExpression() && !isHeritageClauseExtendsOrImplementsKeyword();
}
else {
return isIdentifier() && !isHeritageClauseExtendsOrImplementsKeyword();
}
case 8:
return isIdentifierOrPattern();
case 10:
return token() === 26 || token() === 24 || isIdentifierOrPattern();
case 18:
return isIdentifier();
case 11:
case 15:
return token() === 26 || token() === 24 || isStartOfExpression();
case 16:
return isStartOfParameter();
case 19:
case 20:
return token() === 26 || isStartOfType();
case 21:
return isHeritageClause();
case 22:
return ts.tokenIsIdentifierOrKeyword(token());
case 13:
return ts.tokenIsIdentifierOrKeyword(token()) || token() === 17;
case 14:
return true;
}
ts.Debug.fail("Non-exhaustive case in 'isListElement'.");
}
function isValidHeritageClauseObjectLiteral() {
ts.Debug.assert(token() === 17);
if (nextToken() === 18) {
var next = nextToken();
return next === 26 || next === 17 || next === 85 || next === 108;
}
return true;
}
function nextTokenIsIdentifier() {
nextToken();
return isIdentifier();
}
function nextTokenIsIdentifierOrKeyword() {
nextToken();
return ts.tokenIsIdentifierOrKeyword(token());
}
function isHeritageClauseExtendsOrImplementsKeyword() {
if (token() === 108 ||
token() === 85) {
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 22:
return token() === 18;
case 3:
return token() === 18 || token() === 73 || token() === 79;
case 7:
return token() === 17 || token() === 85 || token() === 108;
case 8:
return isVariableDeclaratorListTerminator();
case 18:
return token() === 29 || token() === 19 || token() === 17 || token() === 85 || token() === 108;
case 11:
return token() === 20 || token() === 25;
case 15:
case 20:
case 10:
return token() === 22;
case 16:
case 17:
return token() === 20 || token() === 22;
case 19:
return token() !== 26;
case 21:
return token() === 17 || token() === 18;
case 13:
return token() === 29 || token() === 41;
case 14:
return token() === 27 && lookAhead(nextTokenIsSlash);
}
}
function isVariableDeclaratorListTerminator() {
if (canParseSemicolon()) {
return true;
}
if (isInOrOfKeyword(token())) {
return true;
}
if (token() === 36) {
return true;
}
return false;
}
function isInSomeParsingContext() {
for (var kind = 0; kind < 23; kind++) {
if (parsingContext & (1 << kind)) {
if (isListElement(kind, true) || isListTerminator(kind)) {
return true;
}
}
}
return false;
}
function parseList(kind, parseElement) {
var saveParsingContext = parsingContext;
parsingContext |= 1 << kind;
var list = [];
var listPos = getNodePos();
while (!isListTerminator(kind)) {
if (isListElement(kind, false)) {
var element = parseListElement(kind, parseElement);
list.push(element);
continue;
}
if (abortParsingListOrMoveToNextToken(kind)) {
break;
}
}
parsingContext = saveParsingContext;
return createNodeArray(list, listPos);
}
function parseListElement(parsingContext, parseElement) {
var node = currentNode(parsingContext);
if (node) {
return consumeNode(node);
}
return parseElement();
}
function currentNode(parsingContext) {
if (parseErrorBeforeNextFinishedNode) {
return undefined;
}
if (!syntaxCursor) {
return undefined;
}
var node = syntaxCursor.currentNode(scanner.getStartPos());
if (ts.nodeIsMissing(node)) {
return undefined;
}
if (node.intersectsChange) {
return undefined;
}
if (ts.containsParseError(node)) {
return undefined;
}
var nodeContextFlags = node.flags & 96256;
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 17:
return false;
case 21:
case 18:
case 20:
case 19:
case 11:
case 12:
case 7:
case 13:
case 14:
}
return false;
}
function isReusableClassMember(node) {
if (node) {
switch (node.kind) {
case 152:
case 157:
case 153:
case 154:
case 149:
case 206:
return true;
case 151:
var methodDeclaration = node;
var nameIsConstructor = methodDeclaration.name.kind === 71 &&
methodDeclaration.name.originalKeywordKind === 123;
return !nameIsConstructor;
}
}
return false;
}
function isReusableSwitchClause(node) {
if (node) {
switch (node.kind) {
case 257:
case 258:
return true;
}
}
return false;
}
function isReusableStatement(node) {
if (node) {
switch (node.kind) {
case 228:
case 208:
case 207:
case 211:
case 210:
case 223:
case 219:
case 221:
case 218:
case 217:
case 215:
case 216:
case 214:
case 213:
case 220:
case 209:
case 224:
case 222:
case 212:
case 225:
case 238:
case 237:
case 244:
case 243:
case 233:
case 229:
case 230:
case 232:
case 231:
return true;
}
}
return false;
}
function isReusableEnumMember(node) {
return node.kind === 264;
}
function isReusableTypeMember(node) {
if (node) {
switch (node.kind) {
case 156:
case 150:
case 157:
case 148:
case 155:
return true;
}
}
return false;
}
function isReusableVariableDeclaration(node) {
if (node.kind !== 226) {
return false;
}
var variableDeclarator = node;
return variableDeclarator.initializer === undefined;
}
function isReusableParameter(node) {
if (node.kind !== 146) {
return false;
}
var parameter = node;
return parameter.initializer === undefined;
}
function abortParsingListOrMoveToNextToken(kind) {
parseErrorAtCurrentToken(parsingContextErrors(kind));
if (isInSomeParsingContext()) {
return true;
}
nextToken();
return false;
}
function parsingContextErrors(context) {
switch (context) {
case 0: return ts.Diagnostics.Declaration_or_statement_expected;
case 1: return ts.Diagnostics.Declaration_or_statement_expected;
case 2: return ts.Diagnostics.case_or_default_expected;
case 3: return ts.Diagnostics.Statement_expected;
case 17:
case 4: return ts.Diagnostics.Property_or_signature_expected;
case 5: return ts.Diagnostics.Unexpected_token_A_constructor_method_accessor_or_property_was_expected;
case 6: return ts.Diagnostics.Enum_member_expected;
case 7: return ts.Diagnostics.Expression_expected;
case 8: return ts.Diagnostics.Variable_declaration_expected;
case 9: return ts.Diagnostics.Property_destructuring_pattern_expected;
case 10: return ts.Diagnostics.Array_element_destructuring_pattern_expected;
case 11: return ts.Diagnostics.Argument_expression_expected;
case 12: return ts.Diagnostics.Property_assignment_expected;
case 15: return ts.Diagnostics.Expression_or_comma_expected;
case 16: return ts.Diagnostics.Parameter_declaration_expected;
case 18: return ts.Diagnostics.Type_parameter_declaration_expected;
case 19: return ts.Diagnostics.Type_argument_expected;
case 20: return ts.Diagnostics.Type_expected;
case 21: return ts.Diagnostics.Unexpected_token_expected;
case 22: return ts.Diagnostics.Identifier_expected;
case 13: return ts.Diagnostics.Identifier_expected;
case 14: return ts.Diagnostics.Identifier_expected;
}
}
function parseDelimitedList(kind, parseElement, considerSemicolonAsDelimiter) {
var saveParsingContext = parsingContext;
parsingContext |= 1 << kind;
var list = [];
var listPos = getNodePos();
var commaStart = -1;
while (true) {
if (isListElement(kind, false)) {
var startPos = scanner.getStartPos();
list.push(parseListElement(kind, parseElement));
commaStart = scanner.getTokenPos();
if (parseOptional(26)) {
continue;
}
commaStart = -1;
if (isListTerminator(kind)) {
break;
}
parseExpected(26);
if (considerSemicolonAsDelimiter && token() === 25 && !scanner.hasPrecedingLineBreak()) {
nextToken();
}
if (startPos === scanner.getStartPos()) {
nextToken();
}
continue;
}
if (isListTerminator(kind)) {
break;
}
if (abortParsingListOrMoveToNextToken(kind)) {
break;
}
}
parsingContext = saveParsingContext;
var result = createNodeArray(list, listPos);
if (commaStart >= 0) {
result.hasTrailingComma = true;
}
return result;
}
function createMissingList() {
return createNodeArray([], getNodePos());
}
function parseBracketedList(kind, parseElement, open, close) {
if (parseExpected(open)) {
var result = parseDelimitedList(kind, parseElement);
parseExpected(close);
return result;
}
return createMissingList();
}
function parseEntityName(allowReservedWords, diagnosticMessage) {
var entity = allowReservedWords ? parseIdentifierName(diagnosticMessage) : parseIdentifier(diagnosticMessage);
var dotPos = scanner.getStartPos();
while (parseOptional(23)) {
if (token() === 27) {
entity.jsdocDotPos = dotPos;
break;
}
dotPos = scanner.getStartPos();
entity = createQualifiedName(entity, parseRightSideOfDot(allowReservedWords));
}
return entity;
}
function createQualifiedName(entity, name) {
var node = createNode(143, entity.pos);
node.left = entity;
node.right = name;
return finishNode(node);
}
function parseRightSideOfDot(allowIdentifierNames) {
if (scanner.hasPrecedingLineBreak() && ts.tokenIsIdentifierOrKeyword(token())) {
var matchesPattern = lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine);
if (matchesPattern) {
return createMissingNode(71, true, ts.Diagnostics.Identifier_expected);
}
}
return allowIdentifierNames ? parseIdentifierName() : parseIdentifier();
}
function parseTemplateExpression() {
var template = createNode(196);
template.head = parseTemplateHead();
ts.Debug.assert(template.head.kind === 14, "Template head has wrong token kind");
var list = [];
var listPos = getNodePos();
do {
list.push(parseTemplateSpan());
} while (ts.lastOrUndefined(list).literal.kind === 15);
template.templateSpans = createNodeArray(list, listPos);
return finishNode(template);
}
function parseTemplateSpan() {
var span = createNode(205);
span.expression = allowInAnd(parseExpression);
var literal;
if (token() === 18) {
reScanTemplateToken();
literal = parseTemplateMiddleOrTemplateTail();
}
else {
literal = parseExpectedToken(16, false, ts.Diagnostics._0_expected, ts.tokenToString(18));
}
span.literal = literal;
return finishNode(span);
}
function parseLiteralNode() {
return parseLiteralLikeNode(token());
}
function parseTemplateHead() {
var fragment = parseLiteralLikeNode(token());
ts.Debug.assert(fragment.kind === 14, "Template head has wrong token kind");
return fragment;
}
function parseTemplateMiddleOrTemplateTail() {
var fragment = parseLiteralLikeNode(token());
ts.Debug.assert(fragment.kind === 15 || fragment.kind === 16, "Template fragment has wrong token kind");
return fragment;
}
function parseLiteralLikeNode(kind) {
var node = createNode(kind);
var text = scanner.getTokenValue();
node.text = text;
if (scanner.hasExtendedUnicodeEscape()) {
node.hasExtendedUnicodeEscape = true;
}
if (scanner.isUnterminated()) {
node.isUnterminated = true;
}
if (node.kind === 8) {
node.numericLiteralFlags = scanner.getNumericLiteralFlags();
}
nextToken();
finishNode(node);
return node;
}
function parseTypeReference() {
var node = createNode(159);
node.typeName = parseEntityName(true, ts.Diagnostics.Type_expected);
if (!scanner.hasPrecedingLineBreak() && token() === 27) {
node.typeArguments = parseBracketedList(19, parseType, 27, 29);
}
return finishNode(node);
}
function parseThisTypePredicate(lhs) {
nextToken();
var node = createNode(158, lhs.pos);
node.parameterName = lhs;
node.type = parseType();
return finishNode(node);
}
function parseThisTypeNode() {
var node = createNode(169);
nextToken();
return finishNode(node);
}
function parseJSDocAllType() {
var result = createNode(268);
nextToken();
return finishNode(result);
}
function parseJSDocUnknownOrNullableType() {
var pos = scanner.getStartPos();
nextToken();
if (token() === 26 ||
token() === 18 ||
token() === 20 ||
token() === 29 ||
token() === 58 ||
token() === 49) {
var result = createNode(269, pos);
return finishNode(result);
}
else {
var result = createNode(270, pos);
result.type = parseType();
return finishNode(result);
}
}
function parseJSDocFunctionType() {
if (lookAhead(nextTokenIsOpenParen)) {
var result = createNode(273);
nextToken();
fillSignature(56, 4 | 32, result);
return addJSDocComment(finishNode(result));
}
var node = createNode(159);
node.typeName = parseIdentifierName();
return finishNode(node);
}
function parseJSDocParameter() {
var parameter = createNode(146);
if (token() === 99 || token() === 94) {
parameter.name = parseIdentifierName();
parseExpected(56);
}
parameter.type = parseType();
return finishNode(parameter);
}
function parseJSDocNodeWithType(kind) {
var result = createNode(kind);
nextToken();
result.type = parseNonArrayType();
return finishNode(result);
}
function parseTypeQuery() {
var node = createNode(162);
parseExpected(103);
node.exprName = parseEntityName(true);
return finishNode(node);
}
function parseTypeParameter() {
var node = createNode(145);
node.name = parseIdentifier();
if (parseOptional(85)) {
if (isStartOfType() || !isStartOfExpression()) {
node.constraint = parseType();
}
else {
node.expression = parseUnaryExpressionOrHigher();
}
}
if (parseOptional(58)) {
node.default = parseType();
}
return finishNode(node);
}
function parseTypeParameters() {
if (token() === 27) {
return parseBracketedList(18, parseTypeParameter, 27, 29);
}
}
function parseParameterType() {
if (parseOptional(56)) {
return parseType();
}
return undefined;
}
function isStartOfParameter() {
return token() === 24 ||
isIdentifierOrPattern() ||
ts.isModifierKind(token()) ||
token() === 57 ||
isStartOfType(true);
}
function parseParameter(requireEqualsToken) {
var node = createNode(146);
if (token() === 99) {
node.name = createIdentifier(true);
node.type = parseParameterType();
return finishNode(node);
}
node.decorators = parseDecorators();
node.modifiers = parseModifiers();
node.dotDotDotToken = parseOptionalToken(24);
node.name = parseIdentifierOrPattern();
if (ts.getFullWidth(node.name) === 0 && !ts.hasModifiers(node) && ts.isModifierKind(token())) {
nextToken();
}
node.questionToken = parseOptionalToken(55);
node.type = parseParameterType();
node.initializer = parseInitializer(true, requireEqualsToken);
return addJSDocComment(finishNode(node));
}
function fillSignature(returnToken, flags, signature) {
if (!(flags & 32)) {
signature.typeParameters = parseTypeParameters();
}
signature.parameters = parseParameterList(flags);
signature.type = parseReturnType(returnToken, !!(flags & 4));
}
function parseReturnType(returnToken, isType) {
return shouldParseReturnType(returnToken, isType) ? parseTypeOrTypePredicate() : undefined;
}
function shouldParseReturnType(returnToken, isType) {
if (returnToken === 36) {
parseExpected(returnToken);
return true;
}
else if (parseOptional(56)) {
return true;
}
else if (isType && token() === 36) {
parseErrorAtCurrentToken(ts.Diagnostics._0_expected, ts.tokenToString(56));
nextToken();
return true;
}
return false;
}
function parseParameterList(flags) {
if (parseExpected(19)) {
var savedYieldContext = inYieldContext();
var savedAwaitContext = inAwaitContext();
setYieldContext(!!(flags & 1));
setAwaitContext(!!(flags & 2));
var result = parseDelimitedList(16, flags & 32 ? parseJSDocParameter : function () { return parseParameter(!!(flags & 8)); });
setYieldContext(savedYieldContext);
setAwaitContext(savedAwaitContext);
if (!parseExpected(20) && (flags & 8)) {
return undefined;
}
return result;
}
return (flags & 8) ? undefined : createMissingList();
}
function parseTypeMemberSemicolon() {
if (parseOptional(26)) {
return;
}
parseSemicolon();
}
function parseSignatureMember(kind) {
var node = createNode(kind);
if (kind === 156) {
parseExpected(94);
}
fillSignature(56, 4, node);
parseTypeMemberSemicolon();
return addJSDocComment(finishNode(node));
}
function isIndexSignature() {
if (token() !== 21) {
return false;
}
return lookAhead(isUnambiguouslyIndexSignature);
}
function isUnambiguouslyIndexSignature() {
nextToken();
if (token() === 24 || token() === 22) {
return true;
}
if (ts.isModifierKind(token())) {
nextToken();
if (isIdentifier()) {
return true;
}
}
else if (!isIdentifier()) {
return false;
}
else {
nextToken();
}
if (token() === 56 || token() === 26) {
return true;
}
if (token() !== 55) {
return false;
}
nextToken();
return token() === 56 || token() === 26 || token() === 22;
}
function parseIndexSignatureDeclaration(fullStart, decorators, modifiers) {
var node = createNode(157, fullStart);
node.decorators = decorators;
node.modifiers = modifiers;
node.parameters = parseBracketedList(16, parseParameter, 21, 22);
node.type = parseTypeAnnotation();
parseTypeMemberSemicolon();
return addJSDocComment(finishNode(node));
}
function parsePropertyOrMethodSignature(fullStart, modifiers) {
var name = parsePropertyName();
var questionToken = parseOptionalToken(55);
if (token() === 19 || token() === 27) {
var method = createNode(150, fullStart);
method.modifiers = modifiers;
method.name = name;
method.questionToken = questionToken;
fillSignature(56, 4, method);
parseTypeMemberSemicolon();
return addJSDocComment(finishNode(method));
}
else {
var property = createNode(148, fullStart);
property.modifiers = modifiers;
property.name = name;
property.questionToken = questionToken;
property.type = parseTypeAnnotation();
if (token() === 58) {
property.initializer = parseNonParameterInitializer();
}
parseTypeMemberSemicolon();
return addJSDocComment(finishNode(property));
}
}
function isTypeMemberStart() {
if (token() === 19 || token() === 27) {
return true;
}
var idToken;
while (ts.isModifierKind(token())) {
idToken = true;
nextToken();
}
if (token() === 21) {
return true;
}
if (isLiteralPropertyName()) {
idToken = true;
nextToken();
}
if (idToken) {
return token() === 19 ||
token() === 27 ||
token() === 55 ||
token() === 56 ||
token() === 26 ||
canParseSemicolon();
}
return false;
}
function parseTypeMember() {
if (token() === 19 || token() === 27) {
return parseSignatureMember(155);
}
if (token() === 94 && lookAhead(nextTokenIsOpenParenOrLessThan)) {
return parseSignatureMember(156);
}
var fullStart = getNodePos();
var modifiers = parseModifiers();
if (isIndexSignature()) {
return parseIndexSignatureDeclaration(fullStart, undefined, modifiers);
}
return parsePropertyOrMethodSignature(fullStart, modifiers);
}
function nextTokenIsOpenParenOrLessThan() {
nextToken();
return token() === 19 || token() === 27;
}
function parseTypeLiteral() {
var node = createNode(163);
node.members = parseObjectTypeMembers();
return finishNode(node);
}
function parseObjectTypeMembers() {
var members;
if (parseExpected(17)) {
members = parseList(4, parseTypeMember);
parseExpected(18);
}
else {
members = createMissingList();
}
return members;
}
function isStartOfMappedType() {
nextToken();
if (token() === 131) {
nextToken();
}
return token() === 21 && nextTokenIsIdentifier() && nextToken() === 92;
}
function parseMappedTypeParameter() {
var node = createNode(145);
node.name = parseIdentifier();
parseExpected(92);
node.constraint = parseType();
return finishNode(node);
}
function parseMappedType() {
var node = createNode(172);
parseExpected(17);
node.readonlyToken = parseOptionalToken(131);
parseExpected(21);
node.typeParameter = parseMappedTypeParameter();
parseExpected(22);
node.questionToken = parseOptionalToken(55);
node.type = parseTypeAnnotation();
parseSemicolon();
parseExpected(18);
return finishNode(node);
}
function parseTupleType() {
var node = createNode(165);
node.elementTypes = parseBracketedList(20, parseType, 21, 22);
return finishNode(node);
}
function parseParenthesizedType() {
var node = createNode(168);
parseExpected(19);
node.type = parseType();
parseExpected(20);
return finishNode(node);
}
function parseFunctionOrConstructorType(kind) {
var node = createNode(kind);
if (kind === 161) {
parseExpected(94);
}
fillSignature(36, 4, node);
return addJSDocComment(finishNode(node));
}
function parseKeywordAndNoDot() {
var node = parseTokenNode();
return token() === 23 ? undefined : node;
}
function parseLiteralTypeNode(negative) {
var node = createNode(173);
var unaryMinusExpression;
if (negative) {
unaryMinusExpression = createNode(192);
unaryMinusExpression.operator = 38;
nextToken();
}
var expression = token() === 101 || token() === 86
? parseTokenNode()
: parseLiteralLikeNode(token());
if (negative) {
unaryMinusExpression.operand = expression;
finishNode(unaryMinusExpression);
expression = unaryMinusExpression;
}
node.literal = expression;
return finishNode(node);
}
function nextTokenIsNumericLiteral() {
return nextToken() === 8;
}
function parseNonArrayType() {
switch (token()) {
case 119:
case 136:
case 133:
case 122:
case 137:
case 139:
case 130:
case 134:
return tryParse(parseKeywordAndNoDot) || parseTypeReference();
case 39:
return parseJSDocAllType();
case 55:
return parseJSDocUnknownOrNullableType();
case 89:
return parseJSDocFunctionType();
case 24:
return parseJSDocNodeWithType(274);
case 51:
return parseJSDocNodeWithType(271);
case 13:
case 9:
case 8:
case 101:
case 86:
return parseLiteralTypeNode();
case 38:
return lookAhead(nextTokenIsNumericLiteral) ? parseLiteralTypeNode(true) : parseTypeReference();
case 105:
case 95:
return parseTokenNode();
case 99: {
var thisKeyword = parseThisTypeNode();
if (token() === 126 && !scanner.hasPrecedingLineBreak()) {
return parseThisTypePredicate(thisKeyword);
}
else {
return thisKeyword;
}
}
case 103:
return parseTypeQuery();
case 17:
return lookAhead(isStartOfMappedType) ? parseMappedType() : parseTypeLiteral();
case 21:
return parseTupleType();
case 19:
return parseParenthesizedType();
default:
return parseTypeReference();
}
}
function isStartOfType(inStartOfParameter) {
switch (token()) {
case 119:
case 136:
case 133:
case 122:
case 137:
case 105:
case 139:
case 95:
case 99:
case 103:
case 130:
case 17:
case 21:
case 27:
case 49:
case 48:
case 94:
case 9:
case 8:
case 101:
case 86:
case 134:
case 39:
case 55:
case 51:
case 24:
return true;
case 38:
return !inStartOfParameter && lookAhead(nextTokenIsNumericLiteral);
case 19:
return !inStartOfParameter && lookAhead(isStartOfParenthesizedOrFunctionType);
default:
return isIdentifier();
}
}
function isStartOfParenthesizedOrFunctionType() {
nextToken();
return token() === 20 || isStartOfParameter() || isStartOfType();
}
function parsePostfixTypeOrHigher() {
var type = parseNonArrayType();
while (!scanner.hasPrecedingLineBreak()) {
switch (token()) {
case 58:
if (!(contextFlags & 1048576)) {
return type;
}
type = createJSDocPostfixType(272, type);
break;
case 51:
type = createJSDocPostfixType(271, type);
break;
case 55:
type = createJSDocPostfixType(270, type);
break;
case 21:
parseExpected(21);
if (isStartOfType()) {
var node = createNode(171, type.pos);
node.objectType = type;
node.indexType = parseType();
parseExpected(22);
type = finishNode(node);
}
else {
var node = createNode(164, type.pos);
node.elementType = type;
parseExpected(22);
type = finishNode(node);
}
break;
default:
return type;
}
}
return type;
}
function createJSDocPostfixType(kind, type) {
nextToken();
var postfix = createNode(kind, type.pos);
postfix.type = type;
return finishNode(postfix);
}
function parseTypeOperator(operator) {
var node = createNode(170);
parseExpected(operator);
node.operator = operator;
node.type = parseTypeOperatorOrHigher();
return finishNode(node);
}
function parseTypeOperatorOrHigher() {
switch (token()) {
case 127:
return parseTypeOperator(127);
}
return parsePostfixTypeOrHigher();
}
function parseUnionOrIntersectionType(kind, parseConstituentType, operator) {
parseOptional(operator);
var type = parseConstituentType();
if (token() === operator) {
var types = [type];
while (parseOptional(operator)) {
types.push(parseConstituentType());
}
var node = createNode(kind, type.pos);
node.types = createNodeArray(types, type.pos);
type = finishNode(node);
}
return type;
}
function parseIntersectionTypeOrHigher() {
return parseUnionOrIntersectionType(167, parseTypeOperatorOrHigher, 48);
}
function parseUnionTypeOrHigher() {
return parseUnionOrIntersectionType(166, parseIntersectionTypeOrHigher, 49);
}
function isStartOfFunctionType() {
if (token() === 27) {
return true;
}
return token() === 19 && lookAhead(isUnambiguouslyStartOfFunctionType);
}
function skipParameterStart() {
if (ts.isModifierKind(token())) {
parseModifiers();
}
if (isIdentifier() || token() === 99) {
nextToken();
return true;
}
if (token() === 21 || token() === 17) {
var previousErrorCount = parseDiagnostics.length;
parseIdentifierOrPattern();
return previousErrorCount === parseDiagnostics.length;
}
return false;
}
function isUnambiguouslyStartOfFunctionType() {
nextToken();
if (token() === 20 || token() === 24) {
return true;
}
if (skipParameterStart()) {
if (token() === 56 || token() === 26 ||
token() === 55 || token() === 58) {
return true;
}
if (token() === 20) {
nextToken();
if (token() === 36) {
return true;
}
}
}
return false;
}
function parseTypeOrTypePredicate() {
var typePredicateVariable = isIdentifier() && tryParse(parseTypePredicatePrefix);
var type = parseType();
if (typePredicateVariable) {
var node = createNode(158, typePredicateVariable.pos);
node.parameterName = typePredicateVariable;
node.type = type;
return finishNode(node);
}
else {
return type;
}
}
function parseTypePredicatePrefix() {
var id = parseIdentifier();
if (token() === 126 && !scanner.hasPrecedingLineBreak()) {
nextToken();
return id;
}
}
function parseType() {
return doOutsideOfContext(20480, parseTypeWorker);
}
function parseTypeWorker() {
if (isStartOfFunctionType()) {
return parseFunctionOrConstructorType(160);
}
if (token() === 94) {
return parseFunctionOrConstructorType(161);
}
return parseUnionTypeOrHigher();
}
function parseTypeAnnotation() {
return parseOptional(56) ? parseType() : undefined;
}
function isStartOfLeftHandSideExpression() {
switch (token()) {
case 99:
case 97:
case 95:
case 101:
case 86:
case 8:
case 9:
case 13:
case 14:
case 19:
case 21:
case 17:
case 89:
case 75:
case 94:
case 41:
case 63:
case 71:
return true;
case 91:
return lookAhead(nextTokenIsOpenParenOrLessThan);
default:
return isIdentifier();
}
}
function isStartOfExpression() {
if (isStartOfLeftHandSideExpression()) {
return true;
}
switch (token()) {
case 37:
case 38:
case 52:
case 51:
case 80:
case 103:
case 105:
case 43:
case 44:
case 27:
case 121:
case 116:
return true;
default:
if (isBinaryOperator()) {
return true;
}
return isIdentifier();
}
}
function isStartOfExpressionStatement() {
return token() !== 17 &&
token() !== 89 &&
token() !== 75 &&
token() !== 57 &&
isStartOfExpression();
}
function parseExpression() {
var saveDecoratorContext = inDecoratorContext();
if (saveDecoratorContext) {
setDecoratorContext(false);
}
var expr = parseAssignmentExpressionOrHigher();
var operatorToken;
while ((operatorToken = parseOptionalToken(26))) {
expr = makeBinaryExpression(expr, operatorToken, parseAssignmentExpressionOrHigher());
}
if (saveDecoratorContext) {
setDecoratorContext(true);
}
return expr;
}
function parseInitializer(inParameter, requireEqualsToken) {
if (token() !== 58) {
if (scanner.hasPrecedingLineBreak() || (inParameter && token() === 17) || !isStartOfExpression()) {
return undefined;
}
if (inParameter && requireEqualsToken) {
var result = createMissingNode(71, true, ts.Diagnostics._0_expected, "=");
result.escapedText = "= not found";
return result;
}
}
parseExpected(58);
return parseAssignmentExpressionOrHigher();
}
function parseAssignmentExpressionOrHigher() {
if (isYieldExpression()) {
return parseYieldExpression();
}
var arrowExpression = tryParseParenthesizedArrowFunctionExpression() || tryParseAsyncSimpleArrowFunctionExpression();
if (arrowExpression) {
return arrowExpression;
}
var expr = parseBinaryExpressionOrHigher(0);
if (expr.kind === 71 && token() === 36) {
return parseSimpleArrowFunctionExpression(expr);
}
if (ts.isLeftHandSideExpression(expr) && ts.isAssignmentOperator(reScanGreaterToken())) {
return makeBinaryExpression(expr, parseTokenNode(), parseAssignmentExpressionOrHigher());
}
return parseConditionalExpressionRest(expr);
}
function isYieldExpression() {
if (token() === 116) {
if (inYieldContext()) {
return true;
}
return lookAhead(nextTokenIsIdentifierOrKeywordOrLiteralOnSameLine);
}
return false;
}
function nextTokenIsIdentifierOnSameLine() {
nextToken();
return !scanner.hasPrecedingLineBreak() && isIdentifier();
}
function parseYieldExpression() {
var node = createNode(197);
nextToken();
if (!scanner.hasPrecedingLineBreak() &&
(token() === 39 || isStartOfExpression())) {
node.asteriskToken = parseOptionalToken(39);
node.expression = parseAssignmentExpressionOrHigher();
return finishNode(node);
}
else {
return finishNode(node);
}
}
function parseSimpleArrowFunctionExpression(identifier, asyncModifier) {
ts.Debug.assert(token() === 36, "parseSimpleArrowFunctionExpression should only have been called if we had a =>");
var node;
if (asyncModifier) {
node = createNode(187, asyncModifier.pos);
node.modifiers = asyncModifier;
}
else {
node = createNode(187, identifier.pos);
}
var parameter = createNode(146, identifier.pos);
parameter.name = identifier;
finishNode(parameter);
node.parameters = createNodeArray([parameter], parameter.pos, parameter.end);
node.equalsGreaterThanToken = parseExpectedToken(36, false, ts.Diagnostics._0_expected, "=>");
node.body = parseArrowFunctionExpressionBody(!!asyncModifier);
return addJSDocComment(finishNode(node));
}
function tryParseParenthesizedArrowFunctionExpression() {
var triState = isParenthesizedArrowFunctionExpression();
if (triState === 0) {
return undefined;
}
var arrowFunction = triState === 1
? parseParenthesizedArrowFunctionExpressionHead(true)
: tryParse(parsePossibleParenthesizedArrowFunctionExpressionHead);
if (!arrowFunction) {
return undefined;
}
var isAsync = ts.hasModifier(arrowFunction, 256);
var lastToken = token();
arrowFunction.equalsGreaterThanToken = parseExpectedToken(36, false, ts.Diagnostics._0_expected, "=>");
arrowFunction.body = (lastToken === 36 || lastToken === 17)
? parseArrowFunctionExpressionBody(isAsync)
: parseIdentifier();
return addJSDocComment(finishNode(arrowFunction));
}
function isParenthesizedArrowFunctionExpression() {
if (token() === 19 || token() === 27 || token() === 120) {
return lookAhead(isParenthesizedArrowFunctionExpressionWorker);
}
if (token() === 36) {
return 1;
}
return 0;
}
function isParenthesizedArrowFunctionExpressionWorker() {
if (token() === 120) {
nextToken();
if (scanner.hasPrecedingLineBreak()) {
return 0;
}
if (token() !== 19 && token() !== 27) {
return 0;
}
}
var first = token();
var second = nextToken();
if (first === 19) {
if (second === 20) {
var third = nextToken();
switch (third) {
case 36:
case 56:
case 17:
return 1;
default:
return 0;
}
}
if (second === 21 || second === 17) {
return 2;
}
if (second === 24) {
return 1;
}
if (!isIdentifier()) {
return 0;
}
if (nextToken() === 56) {
return 1;
}
return 2;
}
else {
ts.Debug.assert(first === 27);
if (!isIdentifier()) {
return 0;
}
if (sourceFile.languageVariant === 1) {
var isArrowFunctionInJsx = lookAhead(function () {
var third = nextToken();
if (third === 85) {
var fourth = nextToken();
switch (fourth) {
case 58:
case 29:
return false;
default:
return true;
}
}
else if (third === 26) {
return true;
}
return false;
});
if (isArrowFunctionInJsx) {
return 1;
}
return 0;
}
return 2;
}
}
function parsePossibleParenthesizedArrowFunctionExpressionHead() {
return parseParenthesizedArrowFunctionExpressionHead(false);
}
function tryParseAsyncSimpleArrowFunctionExpression() {
if (token() === 120) {
if (lookAhead(isUnParenthesizedAsyncArrowFunctionWorker) === 1) {
var asyncModifier = parseModifiersForArrowFunction();
var expr = parseBinaryExpressionOrHigher(0);
return parseSimpleArrowFunctionExpression(expr, asyncModifier);
}
}
return undefined;
}
function isUnParenthesizedAsyncArrowFunctionWorker() {
if (token() === 120) {
nextToken();
if (scanner.hasPrecedingLineBreak() || token() === 36) {
return 0;
}
var expr = parseBinaryExpressionOrHigher(0);
if (!scanner.hasPrecedingLineBreak() && expr.kind === 71 && token() === 36) {
return 1;
}
}
return 0;
}
function parseParenthesizedArrowFunctionExpressionHead(allowAmbiguity) {
var node = createNode(187);
node.modifiers = parseModifiersForArrowFunction();
var isAsync = ts.hasModifier(node, 256) ? 2 : 0;
fillSignature(56, isAsync | (allowAmbiguity ? 0 : 8), node);
if (!node.parameters) {
return undefined;
}
if (!allowAmbiguity && ((token() !== 36 && token() !== 17) ||
ts.find(node.parameters, function (p) { return p.initializer && ts.isIdentifier(p.initializer) && p.initializer.escapedText === "= not found"; }))) {
return undefined;
}
return node;
}
function parseArrowFunctionExpressionBody(isAsync) {
if (token() === 17) {
return parseFunctionBlock(isAsync ? 2 : 0);
}
if (token() !== 25 &&
token() !== 89 &&
token() !== 75 &&
isStartOfStatement() &&
!isStartOfExpressionStatement()) {
return parseFunctionBlock(16 | (isAsync ? 2 : 0));
}
return isAsync
? doInAwaitContext(parseAssignmentExpressionOrHigher)
: doOutsideOfAwaitContext(parseAssignmentExpressionOrHigher);
}
function parseConditionalExpressionRest(leftOperand) {
var questionToken = parseOptionalToken(55);
if (!questionToken) {
return leftOperand;
}
var node = createNode(195, leftOperand.pos);
node.condition = leftOperand;
node.questionToken = questionToken;
node.whenTrue = doOutsideOfContext(disallowInAndDecoratorContext, parseAssignmentExpressionOrHigher);
node.colonToken = parseExpectedToken(56, false, ts.Diagnostics._0_expected, ts.tokenToString(56));
node.whenFalse = parseAssignmentExpressionOrHigher();
return finishNode(node);
}
function parseBinaryExpressionOrHigher(precedence) {
var leftOperand = parseUnaryExpressionOrHigher();
return parseBinaryExpressionRest(precedence, leftOperand);
}
function isInOrOfKeyword(t) {
return t === 92 || t === 142;
}
function parseBinaryExpressionRest(precedence, leftOperand) {
while (true) {
reScanGreaterToken();
var newPrecedence = getBinaryOperatorPrecedence();
var consumeCurrentOperator = token() === 40 ?
newPrecedence >= precedence :
newPrecedence > precedence;
if (!consumeCurrentOperator) {
break;
}
if (token() === 92 && inDisallowInContext()) {
break;
}
if (token() === 118) {
if (scanner.hasPrecedingLineBreak()) {
break;
}
else {
nextToken();
leftOperand = makeAsExpression(leftOperand, parseType());
}
}
else {
leftOperand = makeBinaryExpression(leftOperand, parseTokenNode(), parseBinaryExpressionOrHigher(newPrecedence));
}
}
return leftOperand;
}
function isBinaryOperator() {
if (inDisallowInContext() && token() === 92) {
return false;
}
return getBinaryOperatorPrecedence() > 0;
}
function getBinaryOperatorPrecedence() {
switch (token()) {
case 54:
return 1;
case 53:
return 2;
case 49:
return 3;
case 50:
return 4;
case 48:
return 5;
case 32:
case 33:
case 34:
case 35:
return 6;
case 27:
case 29:
case 30:
case 31:
case 93:
case 92:
case 118:
return 7;
case 45:
case 46:
case 47:
return 8;
case 37:
case 38:
return 9;
case 39:
case 41:
case 42:
return 10;
case 40:
return 11;
}
return -1;
}
function makeBinaryExpression(left, operatorToken, right) {
var node = createNode(194, left.pos);
node.left = left;
node.operatorToken = operatorToken;
node.right = right;
return finishNode(node);
}
function makeAsExpression(left, right) {
var node = createNode(202, left.pos);
node.expression = left;
node.type = right;
return finishNode(node);
}
function parsePrefixUnaryExpression() {
var node = createNode(192);
node.operator = token();
nextToken();
node.operand = parseSimpleUnaryExpression();
return finishNode(node);
}
function parseDeleteExpression() {
var node = createNode(188);
nextToken();
node.expression = parseSimpleUnaryExpression();
return finishNode(node);
}
function parseTypeOfExpression() {
var node = createNode(189);
nextToken();
node.expression = parseSimpleUnaryExpression();
return finishNode(node);
}
function parseVoidExpression() {
var node = createNode(190);
nextToken();
node.expression = parseSimpleUnaryExpression();
return finishNode(node);
}
function isAwaitExpression() {
if (token() === 121) {
if (inAwaitContext()) {
return true;
}
return lookAhead(nextTokenIsIdentifierOrKeywordOrLiteralOnSameLine);
}
return false;
}
function parseAwaitExpression() {
var node = createNode(191);
nextToken();
node.expression = parseSimpleUnaryExpression();
return finishNode(node);
}
function parseUnaryExpressionOrHigher() {
if (isUpdateExpression()) {
var updateExpression = parseUpdateExpression();
return token() === 40 ?
parseBinaryExpressionRest(getBinaryOperatorPrecedence(), updateExpression) :
updateExpression;
}
var unaryOperator = token();
var simpleUnaryExpression = parseSimpleUnaryExpression();
if (token() === 40) {
var start = ts.skipTrivia(sourceText, simpleUnaryExpression.pos);
if (simpleUnaryExpression.kind === 184) {
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 37:
case 38:
case 52:
case 51:
return parsePrefixUnaryExpression();
case 80:
return parseDeleteExpression();
case 103:
return parseTypeOfExpression();
case 105:
return parseVoidExpression();
case 27:
return parseTypeAssertion();
case 121:
if (isAwaitExpression()) {
return parseAwaitExpression();
}
default:
return parseUpdateExpression();
}
}
function isUpdateExpression() {
switch (token()) {
case 37:
case 38:
case 52:
case 51:
case 80:
case 103:
case 105:
case 121:
return false;
case 27:
if (sourceFile.languageVariant !== 1) {
return false;
}
default:
return true;
}
}
function parseUpdateExpression() {
if (token() === 43 || token() === 44) {
var node = createNode(192);
node.operator = token();
nextToken();
node.operand = parseLeftHandSideExpressionOrHigher();
return finishNode(node);
}
else if (sourceFile.languageVariant === 1 && token() === 27 && lookAhead(nextTokenIsIdentifierOrKeyword)) {
return parseJsxElementOrSelfClosingElement(true);
}
var expression = parseLeftHandSideExpressionOrHigher();
ts.Debug.assert(ts.isLeftHandSideExpression(expression));
if ((token() === 43 || token() === 44) && !scanner.hasPrecedingLineBreak()) {
var node = createNode(193, expression.pos);
node.operand = expression;
node.operator = token();
nextToken();
return finishNode(node);
}
return expression;
}
function parseLeftHandSideExpressionOrHigher() {
var expression;
if (token() === 91 && lookAhead(nextTokenIsOpenParenOrLessThan)) {
sourceFile.flags |= 524288;
expression = parseTokenNode();
}
else {
expression = token() === 97 ? parseSuperExpression() : parseMemberExpressionOrHigher();
}
return parseCallExpressionRest(expression);
}
function parseMemberExpressionOrHigher() {
var expression = parsePrimaryExpression();
return parseMemberExpressionRest(expression);
}
function parseSuperExpression() {
var expression = parseTokenNode();
if (token() === 19 || token() === 23 || token() === 21) {
return expression;
}
var node = createNode(179, expression.pos);
node.expression = expression;
parseExpectedToken(23, 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 === 71) {
return lhs.escapedText === rhs.escapedText;
}
if (lhs.kind === 99) {
return true;
}
return lhs.name.escapedText === rhs.name.escapedText &&
tagNamesAreEquivalent(lhs.expression, rhs.expression);
}
function parseJsxElementOrSelfClosingElement(inExpressionContext) {
var opening = parseJsxOpeningOrSelfClosingElement(inExpressionContext);
var result;
if (opening.kind === 251) {
var node = createNode(249, 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 === 250);
result = opening;
}
if (inExpressionContext && token() === 27) {
var invalidElement = tryParse(function () { return parseJsxElementOrSelfClosingElement(true); });
if (invalidElement) {
parseErrorAtCurrentToken(ts.Diagnostics.JSX_expressions_must_have_one_parent_element);
var badNode = createNode(194, result.pos);
badNode.end = invalidElement.end;
badNode.left = result;
badNode.right = invalidElement;
badNode.operatorToken = createMissingNode(26, false, undefined);
badNode.operatorToken.pos = badNode.operatorToken.end = badNode.right.pos;
return badNode;
}
}
return result;
}
function parseJsxText() {
var node = createNode(10, scanner.getStartPos());
node.containsOnlyWhiteSpaces = currentToken === 11;
currentToken = scanner.scanJsxToken();
return finishNode(node);
}
function parseJsxChild() {
switch (token()) {
case 10:
case 11:
return parseJsxText();
case 17:
return parseJsxExpression(false);
case 27:
return parseJsxElementOrSelfClosingElement(false);
}
ts.Debug.fail("Unknown JSX child kind " + token());
}
function parseJsxChildren(openingTagName) {
var list = [];
var listPos = getNodePos();
var saveParsingContext = parsingContext;
parsingContext |= 1 << 14;
while (true) {
currentToken = scanner.reScanJsxToken();
if (token() === 28) {
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;
}
else if (token() === 7) {
break;
}
var child = parseJsxChild();
if (child) {
list.push(child);
}
}
parsingContext = saveParsingContext;
return createNodeArray(list, listPos);
}
function parseJsxAttributes() {
var jsxAttributes = createNode(254);
jsxAttributes.properties = parseList(13, parseJsxAttribute);
return finishNode(jsxAttributes);
}
function parseJsxOpeningOrSelfClosingElement(inExpressionContext) {
var fullStart = scanner.getStartPos();
parseExpected(27);
var tagName = parseJsxElementName();
var attributes = parseJsxAttributes();
var node;
if (token() === 29) {
node = createNode(251, fullStart);
scanJsxText();
}
else {
parseExpected(41);
if (inExpressionContext) {
parseExpected(29);
}
else {
parseExpected(29, undefined, false);
scanJsxText();
}
node = createNode(250, fullStart);
}
node.tagName = tagName;
node.attributes = attributes;
return finishNode(node);
}
function parseJsxElementName() {
scanJsxIdentifier();
var expression = token() === 99 ?
parseTokenNode() : parseIdentifierName();
while (parseOptional(23)) {
var propertyAccess = createNode(179, expression.pos);
propertyAccess.expression = expression;
propertyAccess.name = parseRightSideOfDot(true);
expression = finishNode(propertyAccess);
}
return expression;
}
function parseJsxExpression(inExpressionContext) {
var node = createNode(256);
parseExpected(17);
if (token() !== 18) {
node.dotDotDotToken = parseOptionalToken(24);
node.expression = parseAssignmentExpressionOrHigher();
}
if (inExpressionContext) {
parseExpected(18);
}
else {
parseExpected(18, undefined, false);
scanJsxText();
}
return finishNode(node);
}
function parseJsxAttribute() {
if (token() === 17) {
return parseJsxSpreadAttribute();
}
scanJsxIdentifier();
var node = createNode(253);
node.name = parseIdentifierName();
if (token() === 58) {
switch (scanJsxAttributeValue()) {
case 9:
node.initializer = parseLiteralNode();
break;
default:
node.initializer = parseJsxExpression(true);
break;
}
}
return finishNode(node);
}
function parseJsxSpreadAttribute() {
var node = createNode(255);
parseExpected(17);
parseExpected(24);
node.expression = parseExpression();
parseExpected(18);
return finishNode(node);
}
function parseJsxClosingElement(inExpressionContext) {
var node = createNode(252);
parseExpected(28);
node.tagName = parseJsxElementName();
if (inExpressionContext) {
parseExpected(29);
}
else {
parseExpected(29, undefined, false);
scanJsxText();
}
return finishNode(node);
}
function parseTypeAssertion() {
var node = createNode(184);
parseExpected(27);
node.type = parseType();
parseExpected(29);
node.expression = parseSimpleUnaryExpression();
return finishNode(node);
}
function parseMemberExpressionRest(expression) {
while (true) {
var dotToken = parseOptionalToken(23);
if (dotToken) {
var propertyAccess = createNode(179, expression.pos);
propertyAccess.expression = expression;
propertyAccess.name = parseRightSideOfDot(true);
expression = finishNode(propertyAccess);
continue;
}
if (token() === 51 && !scanner.hasPrecedingLineBreak()) {
nextToken();
var nonNullExpression = createNode(203, expression.pos);
nonNullExpression.expression = expression;
expression = finishNode(nonNullExpression);
continue;
}
if (!inDecoratorContext() && parseOptional(21)) {
var indexedAccess = createNode(180, expression.pos);
indexedAccess.expression = expression;
if (token() !== 22) {
indexedAccess.argumentExpression = allowInAnd(parseExpression);
if (indexedAccess.argumentExpression.kind === 9 || indexedAccess.argumentExpression.kind === 8) {
var literal = indexedAccess.argumentExpression;
literal.text = internIdentifier(literal.text);
}
}
parseExpected(22);
expression = finishNode(indexedAccess);
continue;
}
if (token() === 13 || token() === 14) {
var tagExpression = createNode(183, expression.pos);
tagExpression.tag = expression;
tagExpression.template = token() === 13
? parseLiteralNode()
: parseTemplateExpression();
expression = finishNode(tagExpression);
continue;
}
return expression;
}
}
function parseCallExpressionRest(expression) {
while (true) {
expression = parseMemberExpressionRest(expression);
if (token() === 27) {
var typeArguments = tryParse(parseTypeArgumentsInExpression);
if (!typeArguments) {
return expression;
}
var callExpr = createNode(181, expression.pos);
callExpr.expression = expression;
callExpr.typeArguments = typeArguments;
callExpr.arguments = parseArgumentList();
expression = finishNode(callExpr);
continue;
}
else if (token() === 19) {
var callExpr = createNode(181, expression.pos);
callExpr.expression = expression;
callExpr.arguments = parseArgumentList();
expression = finishNode(callExpr);
continue;
}
return expression;
}
}
function parseArgumentList() {
parseExpected(19);
var result = parseDelimitedList(11, parseArgumentExpression);
parseExpected(20);
return result;
}
function parseTypeArgumentsInExpression() {
if (!parseOptional(27)) {
return undefined;
}
var typeArguments = parseDelimitedList(19, parseType);
if (!parseExpected(29)) {
return undefined;
}
return typeArguments && canFollowTypeArgumentsInExpression()
? typeArguments
: undefined;
}
function canFollowTypeArgumentsInExpression() {
switch (token()) {
case 19:
case 23:
case 20:
case 22:
case 56:
case 25:
case 55:
case 32:
case 34:
case 33:
case 35:
case 53:
case 54:
case 50:
case 48:
case 49:
case 18:
case 1:
return true;
case 26:
case 17:
default:
return false;
}
}
function parsePrimaryExpression() {
switch (token()) {
case 8:
case 9:
case 13:
return parseLiteralNode();
case 99:
case 97:
case 95:
case 101:
case 86:
return parseTokenNode();
case 19:
return parseParenthesizedExpression();
case 21:
return parseArrayLiteralExpression();
case 17:
return parseObjectLiteralExpression();
case 120:
if (!lookAhead(nextTokenIsFunctionKeywordOnSameLine)) {
break;
}
return parseFunctionExpression();
case 75:
return parseClassExpression();
case 89:
return parseFunctionExpression();
case 94:
return parseNewExpression();
case 41:
case 63:
if (reScanSlashToken() === 12) {
return parseLiteralNode();
}
break;
case 14:
return parseTemplateExpression();
}
return parseIdentifier(ts.Diagnostics.Expression_expected);
}
function parseParenthesizedExpression() {
var node = createNode(185);
parseExpected(19);
node.expression = allowInAnd(parseExpression);
parseExpected(20);
return addJSDocComment(finishNode(node));
}
function parseSpreadElement() {
var node = createNode(198);
parseExpected(24);
node.expression = parseAssignmentExpressionOrHigher();
return finishNode(node);
}
function parseArgumentOrArrayLiteralElement() {
return token() === 24 ? parseSpreadElement() :
token() === 26 ? createNode(200) :
parseAssignmentExpressionOrHigher();
}
function parseArgumentExpression() {
return doOutsideOfContext(disallowInAndDecoratorContext, parseArgumentOrArrayLiteralElement);
}
function parseArrayLiteralExpression() {
var node = createNode(177);
parseExpected(21);
if (scanner.hasPrecedingLineBreak()) {
node.multiLine = true;
}
node.elements = parseDelimitedList(15, parseArgumentOrArrayLiteralElement);
parseExpected(22);
return finishNode(node);
}
function tryParseAccessorDeclaration(fullStart, decorators, modifiers) {
if (parseContextualModifier(125)) {
return parseAccessorDeclaration(153, fullStart, decorators, modifiers);
}
else if (parseContextualModifier(135)) {
return parseAccessorDeclaration(154, fullStart, decorators, modifiers);
}
return undefined;
}
function parseObjectLiteralElement() {
var fullStart = scanner.getStartPos();
var dotDotDotToken = parseOptionalToken(24);
if (dotDotDotToken) {
var spreadElement = createNode(263, fullStart);
spreadElement.expression = parseAssignmentExpressionOrHigher();
return addJSDocComment(finishNode(spreadElement));
}
var decorators = parseDecorators();
var modifiers = parseModifiers();
var accessor = tryParseAccessorDeclaration(fullStart, decorators, modifiers);
if (accessor) {
return accessor;
}
var asteriskToken = parseOptionalToken(39);
var tokenIsIdentifier = isIdentifier();
var propertyName = parsePropertyName();
var questionToken = parseOptionalToken(55);
if (asteriskToken || token() === 19 || token() === 27) {
return parseMethodDeclaration(fullStart, decorators, modifiers, asteriskToken, propertyName, questionToken);
}
var isShorthandPropertyAssignment = tokenIsIdentifier && (token() === 26 || token() === 18 || token() === 58);
if (isShorthandPropertyAssignment) {
var shorthandDeclaration = createNode(262, fullStart);
shorthandDeclaration.name = propertyName;
shorthandDeclaration.questionToken = questionToken;
var equalsToken = parseOptionalToken(58);
if (equalsToken) {
shorthandDeclaration.equalsToken = equalsToken;
shorthandDeclaration.objectAssignmentInitializer = allowInAnd(parseAssignmentExpressionOrHigher);
}
return addJSDocComment(finishNode(shorthandDeclaration));
}
else {
var propertyAssignment = createNode(261, fullStart);
propertyAssignment.modifiers = modifiers;
propertyAssignment.name = propertyName;
propertyAssignment.questionToken = questionToken;
parseExpected(56);
propertyAssignment.initializer = allowInAnd(parseAssignmentExpressionOrHigher);
return addJSDocComment(finishNode(propertyAssignment));
}
}
function parseObjectLiteralExpression() {
var node = createNode(178);
parseExpected(17);
if (scanner.hasPrecedingLineBreak()) {
node.multiLine = true;
}
node.properties = parseDelimitedList(12, parseObjectLiteralElement, true);
parseExpected(18);
return finishNode(node);
}
function parseFunctionExpression() {
var saveDecoratorContext = inDecoratorContext();
if (saveDecoratorContext) {
setDecoratorContext(false);
}
var node = createNode(186);
node.modifiers = parseModifiers();
parseExpected(89);
node.asteriskToken = parseOptionalToken(39);
var isGenerator = node.asteriskToken ? 1 : 0;
var isAsync = ts.hasModifier(node, 256) ? 2 : 0;
node.name =
isGenerator && isAsync ? doInYieldAndAwaitContext(parseOptionalIdentifier) :
isGenerator ? doInYieldContext(parseOptionalIdentifier) :
isAsync ? doInAwaitContext(parseOptionalIdentifier) :
parseOptionalIdentifier();
fillSignature(56, isGenerator | isAsync, node);
node.body = parseFunctionBlock(isGenerator | isAsync);
if (saveDecoratorContext) {
setDecoratorContext(true);
}
return addJSDocComment(finishNode(node));
}
function parseOptionalIdentifier() {
return isIdentifier() ? parseIdentifier() : undefined;
}
function parseNewExpression() {
var fullStart = scanner.getStartPos();
parseExpected(94);
if (parseOptional(23)) {
var node_1 = createNode(204, fullStart);
node_1.keywordToken = 94;
node_1.name = parseIdentifierName();
return finishNode(node_1);
}
var node = createNode(182, fullStart);
node.expression = parseMemberExpressionOrHigher();
node.typeArguments = tryParse(parseTypeArgumentsInExpression);
if (node.typeArguments || token() === 19) {
node.arguments = parseArgumentList();
}
return finishNode(node);
}
function parseBlock(ignoreMissingOpenBrace, diagnosticMessage) {
var node = createNode(207);
if (parseExpected(17, diagnosticMessage) || ignoreMissingOpenBrace) {
if (scanner.hasPrecedingLineBreak()) {
node.multiLine = true;
}
node.statements = parseList(1, parseStatement);
parseExpected(18);
}
else {
node.statements = createMissingList();
}
return finishNode(node);
}
function parseFunctionBlock(flags, diagnosticMessage) {
var savedYieldContext = inYieldContext();
setYieldContext(!!(flags & 1));
var savedAwaitContext = inAwaitContext();
setAwaitContext(!!(flags & 2));
var saveDecoratorContext = inDecoratorContext();
if (saveDecoratorContext) {
setDecoratorContext(false);
}
var block = parseBlock(!!(flags & 16), diagnosticMessage);
if (saveDecoratorContext) {
setDecoratorContext(true);
}
setYieldContext(savedYieldContext);
setAwaitContext(savedAwaitContext);
return block;
}
function parseEmptyStatement() {
var node = createNode(209);
parseExpected(25);
return finishNode(node);
}
function parseIfStatement() {
var node = createNode(211);
parseExpected(90);
parseExpected(19);
node.expression = allowInAnd(parseExpression);
parseExpected(20);
node.thenStatement = parseStatement();
node.elseStatement = parseOptional(82) ? parseStatement() : undefined;
return finishNode(node);
}
function parseDoStatement() {
var node = createNode(212);
parseExpected(81);
node.statement = parseStatement();
parseExpected(106);
parseExpected(19);
node.expression = allowInAnd(parseExpression);
parseExpected(20);
parseOptional(25);
return finishNode(node);
}
function parseWhileStatement() {
var node = createNode(213);
parseExpected(106);
parseExpected(19);
node.expression = allowInAnd(parseExpression);
parseExpected(20);
node.statement = parseStatement();
return finishNode(node);
}
function parseForOrForInOrForOfStatement() {
var pos = getNodePos();
parseExpected(88);
var awaitToken = parseOptionalToken(121);
parseExpected(19);
var initializer = undefined;
if (token() !== 25) {
if (token() === 104 || token() === 110 || token() === 76) {
initializer = parseVariableDeclarationList(true);
}
else {
initializer = disallowInAnd(parseExpression);
}
}
var forOrForInOrForOfStatement;
if (awaitToken ? parseExpected(142) : parseOptional(142)) {
var forOfStatement = createNode(216, pos);
forOfStatement.awaitModifier = awaitToken;
forOfStatement.initializer = initializer;
forOfStatement.expression = allowInAnd(parseAssignmentExpressionOrHigher);
parseExpected(20);
forOrForInOrForOfStatement = forOfStatement;
}
else if (parseOptional(92)) {
var forInStatement = createNode(215, pos);
forInStatement.initializer = initializer;
forInStatement.expression = allowInAnd(parseExpression);
parseExpected(20);
forOrForInOrForOfStatement = forInStatement;
}
else {
var forStatement = createNode(214, pos);
forStatement.initializer = initializer;
parseExpected(25);
if (token() !== 25 && token() !== 20) {
forStatement.condition = allowInAnd(parseExpression);
}
parseExpected(25);
if (token() !== 20) {
forStatement.incrementor = allowInAnd(parseExpression);
}
parseExpected(20);
forOrForInOrForOfStatement = forStatement;
}
forOrForInOrForOfStatement.statement = parseStatement();
return finishNode(forOrForInOrForOfStatement);
}
function parseBreakOrContinueStatement(kind) {
var node = createNode(kind);
parseExpected(kind === 218 ? 72 : 77);
if (!canParseSemicolon()) {
node.label = parseIdentifier();
}
parseSemicolon();
return finishNode(node);
}
function parseReturnStatement() {
var node = createNode(219);
parseExpected(96);
if (!canParseSemicolon()) {
node.expression = allowInAnd(parseExpression);
}
parseSemicolon();
return finishNode(node);
}
function parseWithStatement() {
var node = createNode(220);
parseExpected(107);
parseExpected(19);
node.expression = allowInAnd(parseExpression);
parseExpected(20);
node.statement = parseStatement();
return finishNode(node);
}
function parseCaseClause() {
var node = createNode(257);
parseExpected(73);
node.expression = allowInAnd(parseExpression);
parseExpected(56);
node.statements = parseList(3, parseStatement);
return finishNode(node);
}
function parseDefaultClause() {
var node = createNode(258);
parseExpected(79);
parseExpected(56);
node.statements = parseList(3, parseStatement);
return finishNode(node);
}
function parseCaseOrDefaultClause() {
return token() === 73 ? parseCaseClause() : parseDefaultClause();
}
function parseSwitchStatement() {
var node = createNode(221);
parseExpected(98);
parseExpected(19);
node.expression = allowInAnd(parseExpression);
parseExpected(20);
var caseBlock = createNode(235, scanner.getStartPos());
parseExpected(17);
caseBlock.clauses = parseList(2, parseCaseOrDefaultClause);
parseExpected(18);
node.caseBlock = finishNode(caseBlock);
return finishNode(node);
}
function parseThrowStatement() {
var node = createNode(223);
parseExpected(100);
node.expression = scanner.hasPrecedingLineBreak() ? undefined : allowInAnd(parseExpression);
parseSemicolon();
return finishNode(node);
}
function parseTryStatement() {
var node = createNode(224);
parseExpected(102);
node.tryBlock = parseBlock(false);
node.catchClause = token() === 74 ? parseCatchClause() : undefined;
if (!node.catchClause || token() === 87) {
parseExpected(87);
node.finallyBlock = parseBlock(false);
}
return finishNode(node);
}
function parseCatchClause() {
var result = createNode(260);
parseExpected(74);
if (parseOptional(19)) {
result.variableDeclaration = parseVariableDeclaration();
parseExpected(20);
}
else {
result.variableDeclaration = undefined;
}
result.block = parseBlock(false);
return finishNode(result);
}
function parseDebuggerStatement() {
var node = createNode(225);
parseExpected(78);
parseSemicolon();
return finishNode(node);
}
function parseExpressionOrLabeledStatement() {
var fullStart = scanner.getStartPos();
var expression = allowInAnd(parseExpression);
if (expression.kind === 71 && parseOptional(56)) {
var labeledStatement = createNode(222, fullStart);
labeledStatement.label = expression;
labeledStatement.statement = parseStatement();
return addJSDocComment(finishNode(labeledStatement));
}
else {
var expressionStatement = createNode(210, fullStart);
expressionStatement.expression = expression;
parseSemicolon();
return addJSDocComment(finishNode(expressionStatement));
}
}
function nextTokenIsIdentifierOrKeywordOnSameLine() {
nextToken();
return ts.tokenIsIdentifierOrKeyword(token()) && !scanner.hasPrecedingLineBreak();
}
function nextTokenIsClassKeywordOnSameLine() {
nextToken();
return token() === 75 && !scanner.hasPrecedingLineBreak();
}
function nextTokenIsFunctionKeywordOnSameLine() {
nextToken();
return token() === 89 && !scanner.hasPrecedingLineBreak();
}
function nextTokenIsIdentifierOrKeywordOrLiteralOnSameLine() {
nextToken();
return (ts.tokenIsIdentifierOrKeyword(token()) || token() === 8 || token() === 9) && !scanner.hasPrecedingLineBreak();
}
function isDeclaration() {
while (true) {
switch (token()) {
case 104:
case 110:
case 76:
case 89:
case 75:
case 83:
return true;
case 109:
case 138:
return nextTokenIsIdentifierOnSameLine();
case 128:
case 129:
return nextTokenIsIdentifierOrStringLiteralOnSameLine();
case 117:
case 120:
case 124:
case 112:
case 113:
case 114:
case 131:
nextToken();
if (scanner.hasPrecedingLineBreak()) {
return false;
}
continue;
case 141:
nextToken();
return token() === 17 || token() === 71 || token() === 84;
case 91:
nextToken();
return token() === 9 || token() === 39 ||
token() === 17 || ts.tokenIsIdentifierOrKeyword(token());
case 84:
nextToken();
if (token() === 58 || token() === 39 ||
token() === 17 || token() === 79 ||
token() === 118) {
return true;
}
continue;
case 115:
nextToken();
continue;
default:
return false;
}
}
}
function isStartOfDeclaration() {
return lookAhead(isDeclaration);
}
function isStartOfStatement() {
switch (token()) {
case 57:
case 25:
case 17:
case 104:
case 110:
case 89:
case 75:
case 83:
case 90:
case 81:
case 106:
case 88:
case 77:
case 72:
case 96:
case 107:
case 98:
case 100:
case 102:
case 78:
case 74:
case 87:
return true;
case 91:
return isStartOfDeclaration() || lookAhead(nextTokenIsOpenParenOrLessThan);
case 76:
case 84:
return isStartOfDeclaration();
case 120:
case 124:
case 109:
case 128:
case 129:
case 138:
case 141:
return true;
case 114:
case 112:
case 113:
case 115:
case 131:
return isStartOfDeclaration() || !lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine);
default:
return isStartOfExpression();
}
}
function nextTokenIsIdentifierOrStartOfDestructuring() {
nextToken();
return isIdentifier() || token() === 17 || token() === 21;
}
function isLetDeclaration() {
return lookAhead(nextTokenIsIdentifierOrStartOfDestructuring);
}
function parseStatement() {
switch (token()) {
case 25:
return parseEmptyStatement();
case 17:
return parseBlock(false);
case 104:
return parseVariableStatement(scanner.getStartPos(), undefined, undefined);
case 110:
if (isLetDeclaration()) {
return parseVariableStatement(scanner.getStartPos(), undefined, undefined);
}
break;
case 89:
return parseFunctionDeclaration(scanner.getStartPos(), undefined, undefined);
case 75:
return parseClassDeclaration(scanner.getStartPos(), undefined, undefined);
case 90:
return parseIfStatement();
case 81:
return parseDoStatement();
case 106:
return parseWhileStatement();
case 88:
return parseForOrForInOrForOfStatement();
case 77:
return parseBreakOrContinueStatement(217);
case 72:
return parseBreakOrContinueStatement(218);
case 96:
return parseReturnStatement();
case 107:
return parseWithStatement();
case 98:
return parseSwitchStatement();
case 100:
return parseThrowStatement();
case 102:
case 74:
case 87:
return parseTryStatement();
case 78:
return parseDebuggerStatement();
case 57:
return parseDeclaration();
case 120:
case 109:
case 138:
case 128:
case 129:
case 124:
case 76:
case 83:
case 84:
case 91:
case 112:
case 113:
case 114:
case 117:
case 115:
case 131:
case 141:
if (isStartOfDeclaration()) {
return parseDeclaration();
}
break;
}
return parseExpressionOrLabeledStatement();
}
function parseDeclaration() {
var fullStart = getNodePos();
var decorators = parseDecorators();
var modifiers = parseModifiers();
switch (token()) {
case 104:
case 110:
case 76:
return parseVariableStatement(fullStart, decorators, modifiers);
case 89:
return parseFunctionDeclaration(fullStart, decorators, modifiers);
case 75:
return parseClassDeclaration(fullStart, decorators, modifiers);
case 109:
return parseInterfaceDeclaration(fullStart, decorators, modifiers);
case 138:
return parseTypeAliasDeclaration(fullStart, decorators, modifiers);
case 83:
return parseEnumDeclaration(fullStart, decorators, modifiers);
case 141:
case 128:
case 129:
return parseModuleDeclaration(fullStart, decorators, modifiers);
case 91:
return parseImportDeclarationOrImportEqualsDeclaration(fullStart, decorators, modifiers);
case 84:
nextToken();
switch (token()) {
case 79:
case 58:
return parseExportAssignment(fullStart, decorators, modifiers);
case 118:
return parseNamespaceExportDeclaration(fullStart, decorators, modifiers);
default:
return parseExportDeclaration(fullStart, decorators, modifiers);
}
default:
if (decorators || modifiers) {
var node = createMissingNode(247, true, ts.Diagnostics.Declaration_expected);
node.pos = fullStart;
node.decorators = decorators;
node.modifiers = modifiers;
return finishNode(node);
}
}
}
function nextTokenIsIdentifierOrStringLiteralOnSameLine() {
nextToken();
return !scanner.hasPrecedingLineBreak() && (isIdentifier() || token() === 9);
}
function parseFunctionBlockOrSemicolon(flags, diagnosticMessage) {
if (token() !== 17 && canParseSemicolon()) {
parseSemicolon();
return;
}
return parseFunctionBlock(flags, diagnosticMessage);
}
function parseArrayBindingElement() {
if (token() === 26) {
return createNode(200);
}
var node = createNode(176);
node.dotDotDotToken = parseOptionalToken(24);
node.name = parseIdentifierOrPattern();
node.initializer = parseInitializer(false);
return finishNode(node);
}
function parseObjectBindingElement() {
var node = createNode(176);
node.dotDotDotToken = parseOptionalToken(24);
var tokenIsIdentifier = isIdentifier();
var propertyName = parsePropertyName();
if (tokenIsIdentifier && token() !== 56) {
node.name = propertyName;
}
else {
parseExpected(56);
node.propertyName = propertyName;
node.name = parseIdentifierOrPattern();
}
node.initializer = parseInitializer(false);
return finishNode(node);
}
function parseObjectBindingPattern() {
var node = createNode(174);
parseExpected(17);
node.elements = parseDelimitedList(9, parseObjectBindingElement);
parseExpected(18);
return finishNode(node);
}
function parseArrayBindingPattern() {
var node = createNode(175);
parseExpected(21);
node.elements = parseDelimitedList(10, parseArrayBindingElement);
parseExpected(22);
return finishNode(node);
}
function isIdentifierOrPattern() {
return token() === 17 || token() === 21 || isIdentifier();
}
function parseIdentifierOrPattern() {
if (token() === 21) {
return parseArrayBindingPattern();
}
if (token() === 17) {
return parseObjectBindingPattern();
}
return parseIdentifier();
}
function parseVariableDeclaration() {
var node = createNode(226);
node.name = parseIdentifierOrPattern();
node.type = parseTypeAnnotation();
if (!isInOrOfKeyword(token())) {
node.initializer = parseNonParameterInitializer();
}
return finishNode(node);
}
function parseVariableDeclarationList(inForStatementInitializer) {
var node = createNode(227);
switch (token()) {
case 104:
break;
case 110:
node.flags |= 1;
break;
case 76:
node.flags |= 2;
break;
default:
ts.Debug.fail();
}
nextToken();
if (token() === 142 && 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() === 20;
}
function parseVariableStatement(fullStart, decorators, modifiers) {
var node = createNode(208, fullStart);
node.decorators = decorators;
node.modifiers = modifiers;
node.declarationList = parseVariableDeclarationList(false);
parseSemicolon();
return addJSDocComment(finishNode(node));
}
function parseFunctionDeclaration(fullStart, decorators, modifiers) {
var node = createNode(228, fullStart);
node.decorators = decorators;
node.modifiers = modifiers;
parseExpected(89);
node.asteriskToken = parseOptionalToken(39);
node.name = ts.hasModifier(node, 512) ? parseOptionalIdentifier() : parseIdentifier();
var isGenerator = node.asteriskToken ? 1 : 0;
var isAsync = ts.hasModifier(node, 256) ? 2 : 0;
fillSignature(56, isGenerator | isAsync, node);
node.body = parseFunctionBlockOrSemicolon(isGenerator | isAsync, ts.Diagnostics.or_expected);
return addJSDocComment(finishNode(node));
}
function parseConstructorDeclaration(pos, decorators, modifiers) {
var node = createNode(152, pos);
node.decorators = decorators;
node.modifiers = modifiers;
parseExpected(123);
fillSignature(56, 0, node);
node.body = parseFunctionBlockOrSemicolon(0, ts.Diagnostics.or_expected);
return addJSDocComment(finishNode(node));
}
function parseMethodDeclaration(fullStart, decorators, modifiers, asteriskToken, name, questionToken, diagnosticMessage) {
var method = createNode(151, fullStart);
method.decorators = decorators;
method.modifiers = modifiers;
method.asteriskToken = asteriskToken;
method.name = name;
method.questionToken = questionToken;
var isGenerator = asteriskToken ? 1 : 0;
var isAsync = ts.hasModifier(method, 256) ? 2 : 0;
fillSignature(56, isGenerator | isAsync, method);
method.body = parseFunctionBlockOrSemicolon(isGenerator | isAsync, diagnosticMessage);
return addJSDocComment(finishNode(method));
}
function parsePropertyDeclaration(fullStart, decorators, modifiers, name, questionToken) {
var property = createNode(149, fullStart);
property.decorators = decorators;
property.modifiers = modifiers;
property.name = name;
property.questionToken = questionToken;
property.type = parseTypeAnnotation();
property.initializer = ts.hasModifier(property, 32)
? allowInAnd(parseNonParameterInitializer)
: doOutsideOfContext(4096 | 2048, parseNonParameterInitializer);
parseSemicolon();
return addJSDocComment(finishNode(property));
}
function parsePropertyOrMethodDeclaration(fullStart, decorators, modifiers) {
var asteriskToken = parseOptionalToken(39);
var name = parsePropertyName();
var questionToken = parseOptionalToken(55);
if (asteriskToken || token() === 19 || token() === 27) {
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;
node.modifiers = modifiers;
node.name = parsePropertyName();
fillSignature(56, 0, node);
node.body = parseFunctionBlockOrSemicolon(0);
return addJSDocComment(finishNode(node));
}
function isClassMemberModifier(idToken) {
switch (idToken) {
case 114:
case 112:
case 113:
case 115:
case 131:
return true;
default:
return false;
}
}
function isClassMemberStart() {
var idToken;
if (token() === 57) {
return true;
}
while (ts.isModifierKind(token())) {
idToken = token();
if (isClassMemberModifier(idToken)) {
return true;
}
nextToken();
}
if (token() === 39) {
return true;
}
if (isLiteralPropertyName()) {
idToken = token();
nextToken();
}
if (token() === 21) {
return true;
}
if (idToken !== undefined) {
if (!ts.isKeyword(idToken) || idToken === 135 || idToken === 125) {
return true;
}
switch (token()) {
case 19:
case 27:
case 56:
case 58:
case 55:
return true;
default:
return canParseSemicolon();
}
}
return false;
}
function parseDecorators() {
var list;
var listPos = getNodePos();
while (true) {
var decoratorStart = getNodePos();
if (!parseOptional(57)) {
break;
}
var decorator = createNode(147, decoratorStart);
decorator.expression = doInDecoratorContext(parseLeftHandSideExpressionOrHigher);
finishNode(decorator);
(list || (list = [])).push(decorator);
}
return list && createNodeArray(list, listPos);
}
function parseModifiers(permitInvalidConstAsModifier) {
var list;
var listPos = getNodePos();
while (true) {
var modifierStart = scanner.getStartPos();
var modifierKind = token();
if (token() === 76 && permitInvalidConstAsModifier) {
if (!tryParse(nextTokenIsOnSameLineAndCanFollowModifier)) {
break;
}
}
else {
if (!parseAnyContextualModifier()) {
break;
}
}
var modifier = finishNode(createNode(modifierKind, modifierStart));
(list || (list = [])).push(modifier);
}
return list && createNodeArray(list, listPos);
}
function parseModifiersForArrowFunction() {
var modifiers;
if (token() === 120) {
var modifierStart = scanner.getStartPos();
var modifierKind = token();
nextToken();
var modifier = finishNode(createNode(modifierKind, modifierStart));
modifiers = createNodeArray([modifier], modifierStart);
}
return modifiers;
}
function parseClassElement() {
if (token() === 25) {
var result = createNode(206);
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() === 123) {
return parseConstructorDeclaration(fullStart, decorators, modifiers);
}
if (isIndexSignature()) {
return parseIndexSignatureDeclaration(fullStart, decorators, modifiers);
}
if (ts.tokenIsIdentifierOrKeyword(token()) ||
token() === 9 ||
token() === 8 ||
token() === 39 ||
token() === 21) {
return parsePropertyOrMethodDeclaration(fullStart, decorators, modifiers);
}
if (decorators || modifiers) {
var name = createMissingNode(71, true, ts.Diagnostics.Declaration_expected);
return parsePropertyDeclaration(fullStart, decorators, modifiers, name, undefined);
}
ts.Debug.fail("Should not have attempted to parse class member declaration.");
}
function parseClassExpression() {
return parseClassDeclarationOrExpression(scanner.getStartPos(), undefined, undefined, 199);
}
function parseClassDeclaration(fullStart, decorators, modifiers) {
return parseClassDeclarationOrExpression(fullStart, decorators, modifiers, 229);
}
function parseClassDeclarationOrExpression(fullStart, decorators, modifiers, kind) {
var node = createNode(kind, fullStart);
node.decorators = decorators;
node.modifiers = modifiers;
parseExpected(75);
node.name = parseNameOfClassDeclarationOrExpression();
node.typeParameters = parseTypeParameters();
node.heritageClauses = parseHeritageClauses();
if (parseExpected(17)) {
node.members = parseClassMembers();
parseExpected(18);
}
else {
node.members = createMissingList();
}
return addJSDocComment(finishNode(node));
}
function parseNameOfClassDeclarationOrExpression() {
return isIdentifier() && !isImplementsClause()
? parseIdentifier()
: undefined;
}
function isImplementsClause() {
return token() === 108 && lookAhead(nextTokenIsIdentifierOrKeyword);
}
function parseHeritageClauses() {
if (isHeritageClause()) {
return parseList(21, parseHeritageClause);
}
return undefined;
}
function parseHeritageClause() {
var tok = token();
if (tok === 85 || tok === 108) {
var node = createNode(259);
node.token = tok;
nextToken();
node.types = parseDelimitedList(7, parseExpressionWithTypeArguments);
return finishNode(node);
}
return undefined;
}
function parseExpressionWithTypeArguments() {
var node = createNode(201);
node.expression = parseLeftHandSideExpressionOrHigher();
node.typeArguments = tryParseTypeArguments();
return finishNode(node);
}
function tryParseTypeArguments() {
return token() === 27
? parseBracketedList(19, parseType, 27, 29)
: undefined;
}
function isHeritageClause() {
return token() === 85 || token() === 108;
}
function parseClassMembers() {
return parseList(5, parseClassElement);
}
function parseInterfaceDeclaration(fullStart, decorators, modifiers) {
var node = createNode(230, fullStart);
node.decorators = decorators;
node.modifiers = modifiers;
parseExpected(109);
node.name = parseIdentifier();
node.typeParameters = parseTypeParameters();
node.heritageClauses = parseHeritageClauses();
node.members = parseObjectTypeMembers();
return addJSDocComment(finishNode(node));
}
function parseTypeAliasDeclaration(fullStart, decorators, modifiers) {
var node = createNode(231, fullStart);
node.decorators = decorators;
node.modifiers = modifiers;
parseExpected(138);
node.name = parseIdentifier();
node.typeParameters = parseTypeParameters();
parseExpected(58);
node.type = parseType();
parseSemicolon();
return addJSDocComment(finishNode(node));
}
function parseEnumMember() {
var node = createNode(264, scanner.getStartPos());
node.name = parsePropertyName();
node.initializer = allowInAnd(parseNonParameterInitializer);
return addJSDocComment(finishNode(node));
}
function parseEnumDeclaration(fullStart, decorators, modifiers) {
var node = createNode(232, fullStart);
node.decorators = decorators;
node.modifiers = modifiers;
parseExpected(83);
node.name = parseIdentifier();
if (parseExpected(17)) {
node.members = parseDelimitedList(6, parseEnumMember);
parseExpected(18);
}
else {
node.members = createMissingList();
}
return addJSDocComment(finishNode(node));
}
function parseModuleBlock() {
var node = createNode(234, scanner.getStartPos());
if (parseExpected(17)) {
node.statements = parseList(1, parseStatement);
parseExpected(18);
}
else {
node.statements = createMissingList();
}
return finishNode(node);
}
function parseModuleOrNamespaceDeclaration(fullStart, decorators, modifiers, flags) {
var node = createNode(233, fullStart);
var namespaceFlag = flags & 16;
node.decorators = decorators;
node.modifiers = modifiers;
node.flags |= flags;
node.name = parseIdentifier();
node.body = parseOptional(23)
? parseModuleOrNamespaceDeclaration(getNodePos(), undefined, undefined, 4 | namespaceFlag)
: parseModuleBlock();
return addJSDocComment(finishNode(node));
}
function parseAmbientExternalModuleDeclaration(fullStart, decorators, modifiers) {
var node = createNode(233, fullStart);
node.decorators = decorators;
node.modifiers = modifiers;
if (token() === 141) {
node.name = parseIdentifier();
node.flags |= 512;
}
else {
node.name = parseLiteralNode();
node.name.text = internIdentifier(node.name.text);
}
if (token() === 17) {
node.body = parseModuleBlock();
}
else {
parseSemicolon();
}
return finishNode(node);
}
function parseModuleDeclaration(fullStart, decorators, modifiers) {
var flags = 0;
if (token() === 141) {
return parseAmbientExternalModuleDeclaration(fullStart, decorators, modifiers);
}
else if (parseOptional(129)) {
flags |= 16;
}
else {
parseExpected(128);
if (token() === 9) {
return parseAmbientExternalModuleDeclaration(fullStart, decorators, modifiers);
}
}
return parseModuleOrNamespaceDeclaration(fullStart, decorators, modifiers, flags);
}
function isExternalModuleReference() {
return token() === 132 &&
lookAhead(nextTokenIsOpenParen);
}
function nextTokenIsOpenParen() {
return nextToken() === 19;
}
function nextTokenIsSlash() {
return nextToken() === 41;
}
function parseNamespaceExportDeclaration(fullStart, decorators, modifiers) {
var exportDeclaration = createNode(236, fullStart);
exportDeclaration.decorators = decorators;
exportDeclaration.modifiers = modifiers;
parseExpected(118);
parseExpected(129);
exportDeclaration.name = parseIdentifier();
parseSemicolon();
return finishNode(exportDeclaration);
}
function parseImportDeclarationOrImportEqualsDeclaration(fullStart, decorators, modifiers) {
parseExpected(91);
var afterImportPos = scanner.getStartPos();
var identifier;
if (isIdentifier()) {
identifier = parseIdentifier();
if (token() !== 26 && token() !== 140) {
return parseImportEqualsDeclaration(fullStart, decorators, modifiers, identifier);
}
}
var importDeclaration = createNode(238, fullStart);
importDeclaration.decorators = decorators;
importDeclaration.modifiers = modifiers;
if (identifier ||
token() === 39 ||
token() === 17) {
importDeclaration.importClause = parseImportClause(identifier, afterImportPos);
parseExpected(140);
}
importDeclaration.moduleSpecifier = parseModuleSpecifier();
parseSemicolon();
return finishNode(importDeclaration);
}
function parseImportEqualsDeclaration(fullStart, decorators, modifiers, identifier) {
var importEqualsDeclaration = createNode(237, fullStart);
importEqualsDeclaration.decorators = decorators;
importEqualsDeclaration.modifiers = modifiers;
importEqualsDeclaration.name = identifier;
parseExpected(58);
importEqualsDeclaration.moduleReference = parseModuleReference();
parseSemicolon();
return addJSDocComment(finishNode(importEqualsDeclaration));
}
function parseImportClause(identifier, fullStart) {
var importClause = createNode(239, fullStart);
if (identifier) {
importClause.name = identifier;
}
if (!importClause.name ||
parseOptional(26)) {
importClause.namedBindings = token() === 39 ? parseNamespaceImport() : parseNamedImportsOrExports(241);
}
return finishNode(importClause);
}
function parseModuleReference() {
return isExternalModuleReference()
? parseExternalModuleReference()
: parseEntityName(false);
}
function parseExternalModuleReference() {
var node = createNode(248);
parseExpected(132);
parseExpected(19);
node.expression = parseModuleSpecifier();
parseExpected(20);
return finishNode(node);
}
function parseModuleSpecifier() {
if (token() === 9) {
var result = parseLiteralNode();
result.text = internIdentifier(result.text);
return result;
}
else {
return parseExpression();
}
}
function parseNamespaceImport() {
var namespaceImport = createNode(240);
parseExpected(39);
parseExpected(118);
namespaceImport.name = parseIdentifier();
return finishNode(namespaceImport);
}
function parseNamedImportsOrExports(kind) {
var node = createNode(kind);
node.elements = parseBracketedList(22, kind === 241 ? parseImportSpecifier : parseExportSpecifier, 17, 18);
return finishNode(node);
}
function parseExportSpecifier() {
return parseImportOrExportSpecifier(246);
}
function parseImportSpecifier() {
return parseImportOrExportSpecifier(242);
}
function parseImportOrExportSpecifier(kind) {
var node = createNode(kind);
var checkIdentifierIsKeyword = ts.isKeyword(token()) && !isIdentifier();
var checkIdentifierStart = scanner.getTokenPos();
var checkIdentifierEnd = scanner.getTextPos();
var identifierName = parseIdentifierName();
if (token() === 118) {
node.propertyName = identifierName;
parseExpected(118);
checkIdentifierIsKeyword = ts.isKeyword(token()) && !isIdentifier();
checkIdentifierStart = scanner.getTokenPos();
checkIdentifierEnd = scanner.getTextPos();
node.name = parseIdentifierName();
}
else {
node.name = identifierName;
}
if (kind === 242 && checkIdentifierIsKeyword) {
parseErrorAtPosition(checkIdentifierStart, checkIdentifierEnd - checkIdentifierStart, ts.Diagnostics.Identifier_expected);
}
return finishNode(node);
}
function parseExportDeclaration(fullStart, decorators, modifiers) {
var node = createNode(244, fullStart);
node.decorators = decorators;
node.modifiers = modifiers;
if (parseOptional(39)) {
parseExpected(140);
node.moduleSpecifier = parseModuleSpecifier();
}
else {
node.exportClause = parseNamedImportsOrExports(245);
if (token() === 140 || (token() === 9 && !scanner.hasPrecedingLineBreak())) {
parseExpected(140);
node.moduleSpecifier = parseModuleSpecifier();
}
}
parseSemicolon();
return finishNode(node);
}
function parseExportAssignment(fullStart, decorators, modifiers) {
var node = createNode(243, fullStart);
node.decorators = decorators;
node.modifiers = modifiers;
if (parseOptional(58)) {
node.isExportEquals = true;
}
else {
parseExpected(79);
}
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;
var checkJsDirective = undefined;
while (true) {
var kind = triviaScanner.scan();
if (kind !== 2) {
if (ts.isTrivia(kind)) {
continue;
}
else {
break;
}
}
var range = {
kind: triviaScanner.getToken(),
pos: triviaScanner.getTokenPos(),
end: triviaScanner.getTextPos(),
};
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);
}
}
var checkJsDirectiveRegEx = /^\/\/\/?\s*(@ts-check|@ts-nocheck)\s*$/gim;
var checkJsDirectiveMatchResult = checkJsDirectiveRegEx.exec(comment);
if (checkJsDirectiveMatchResult) {
checkJsDirective = {
enabled: ts.compareStrings(checkJsDirectiveMatchResult[1], "@ts-check", true) === 0,
end: range.end,
pos: range.pos
};
}
}
}
sourceFile.referencedFiles = referencedFiles;
sourceFile.typeReferenceDirectives = typeReferenceDirectives;
sourceFile.amdDependencies = amdDependencies;
sourceFile.moduleName = amdModuleName;
sourceFile.checkJsDirective = checkJsDirective;
}
function setExternalModuleIndicator(sourceFile) {
sourceFile.externalModuleIndicator = ts.forEach(sourceFile.statements, function (node) {
return ts.hasModifier(node, 1)
|| node.kind === 237 && node.moduleReference.kind === 248
|| node.kind === 238
|| node.kind === 243
|| node.kind === 244
? node
: undefined;
});
}
var JSDocParser;
(function (JSDocParser) {
function parseJSDocTypeExpressionForTests(content, start, length) {
initializeState(content, 5, undefined, 1);
sourceFile = createSourceFile("file.js", 5, 1);
scanner.setText(content, start, length);
currentToken = scanner.scan();
var jsDocTypeExpression = parseJSDocTypeExpression();
var diagnostics = parseDiagnostics;
clearState();
return jsDocTypeExpression ? { jsDocTypeExpression: jsDocTypeExpression, diagnostics: diagnostics } : undefined;
}
JSDocParser.parseJSDocTypeExpressionForTests = parseJSDocTypeExpressionForTests;
function parseJSDocTypeExpression(requireBraces) {
var result = createNode(267, scanner.getTokenPos());
if (!parseExpected(17) && requireBraces) {
return undefined;
}
result.type = doInsideOfContext(1048576, parseType);
parseExpected(18);
fixupParentReferences(result);
return finishNode(result);
}
JSDocParser.parseJSDocTypeExpression = parseJSDocTypeExpression;
function parseIsolatedJSDocComment(content, start, length) {
initializeState(content, 5, undefined, 1);
sourceFile = { languageVariant: 0, text: content };
var jsDoc = parseJSDocCommentWorker(start, length);
var diagnostics = parseDiagnostics;
clearState();
return jsDoc ? { jsDoc: jsDoc, diagnostics: diagnostics } : undefined;
}
JSDocParser.parseIsolatedJSDocComment = parseIsolatedJSDocComment;
function parseJSDocComment(parent, start, length) {
var saveToken = currentToken;
var saveParseDiagnosticsLength = parseDiagnostics.length;
var saveParseErrorBeforeNextFinishedNode = parseErrorBeforeNextFinishedNode;
var comment = parseJSDocCommentWorker(start, length);
if (comment) {
comment.parent = parent;
}
if (ts.isInJavaScriptFile(parent)) {
if (!sourceFile.jsDocDiagnostics) {
sourceFile.jsDocDiagnostics = [];
}
(_a = sourceFile.jsDocDiagnostics).push.apply(_a, parseDiagnostics);
}
currentToken = saveToken;
parseDiagnostics.length = saveParseDiagnosticsLength;
parseErrorBeforeNextFinishedNode = saveParseErrorBeforeNextFinishedNode;
return comment;
var _a;
}
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 tagsPos;
var tagsEnd;
var comments = [];
var result;
if (!isJsDocStart(content, start)) {
return result;
}
scanner.scanRange(start + 3, length - 5, function () {
var advanceToken = true;
var state = 1;
var margin = undefined;
var indent = start - Math.max(content.lastIndexOf("\n", start), 0) + 4;
function pushComment(text) {
if (!margin) {
margin = indent;
}
comments.push(text);
indent += text.length;
}
nextJSDocToken();
while (token() === 5) {
nextJSDocToken();
}
if (token() === 4) {
state = 0;
indent = 0;
nextJSDocToken();
}
while (token() !== 1) {
switch (token()) {
case 57:
if (state === 0 || state === 1) {
removeTrailingNewlines(comments);
parseTag(indent);
state = 0;
advanceToken = false;
margin = undefined;
indent++;
}
else {
pushComment(scanner.getTokenText());
}
break;
case 4:
comments.push(scanner.getTokenText());
state = 0;
indent = 0;
break;
case 39:
var asterisk = scanner.getTokenText();
if (state === 1 || state === 2) {
state = 2;
pushComment(asterisk);
}
else {
state = 1;
indent += asterisk.length;
}
break;
case 71:
pushComment(scanner.getTokenText());
state = 2;
break;
case 5:
var whitespace = scanner.getTokenText();
if (state === 2) {
comments.push(whitespace);
}
else if (margin !== undefined && indent + whitespace.length > margin) {
comments.push(whitespace.slice(margin - indent - 1));
}
indent += whitespace.length;
break;
case 1:
break;
default:
state = 2;
pushComment(scanner.getTokenText());
break;
}
if (advanceToken) {
nextJSDocToken();
}
else {
advanceToken = true;
}
}
removeLeadingNewlines(comments);
removeTrailingNewlines(comments);
result = createJSDocComment();
});
return result;
function removeLeadingNewlines(comments) {
while (comments.length && (comments[0] === "\n" || comments[0] === "\r")) {
comments.shift();
}
}
function removeTrailingNewlines(comments) {
while (comments.length && (comments[comments.length - 1] === "\n" || comments[comments.length - 1] === "\r")) {
comments.pop();
}
}
function isJsDocStart(content, start) {
return content.charCodeAt(start) === 47 &&
content.charCodeAt(start + 1) === 42 &&
content.charCodeAt(start + 2) === 42 &&
content.charCodeAt(start + 3) !== 42;
}
function createJSDocComment() {
var result = createNode(275, start);
result.tags = tags && createNodeArray(tags, tagsPos, tagsEnd);
result.comment = comments.length ? comments.join("") : undefined;
return finishNode(result, end);
}
function skipWhitespace() {
while (token() === 5 || token() === 4) {
nextJSDocToken();
}
}
function parseTag(indent) {
ts.Debug.assert(token() === 57);
var atToken = createNode(57, scanner.getTokenPos());
atToken.end = scanner.getTextPos();
nextJSDocToken();
var tagName = parseJSDocIdentifierName();
skipWhitespace();
if (!tagName) {
return;
}
var tag;
if (tagName) {
switch (tagName.escapedText) {
case "augments":
case "extends":
tag = parseAugmentsTag(atToken, tagName);
break;
case "class":
case "constructor":
tag = parseClassTag(atToken, tagName);
break;
case "arg":
case "argument":
case "param":
tag = parseParameterOrPropertyTag(atToken, tagName, 1);
break;
case "return":
case "returns":
tag = parseReturnTag(atToken, tagName);
break;
case "template":
tag = parseTemplateTag(atToken, tagName);
break;
case "type":
tag = parseTypeTag(atToken, tagName);
break;
case "typedef":
tag = parseTypedefTag(atToken, tagName);
break;
default:
tag = parseUnknownTag(atToken, tagName);
break;
}
}
else {
tag = parseUnknownTag(atToken, tagName);
}
if (!tag) {
return;
}
addTag(tag, parseTagComments(indent + tag.end - tag.pos));
}
function parseTagComments(indent) {
var comments = [];
var state = 0;
var margin;
function pushComment(text) {
if (!margin) {
margin = indent;
}
comments.push(text);
indent += text.length;
}
while (token() !== 57 && token() !== 1) {
switch (token()) {
case 4:
if (state >= 1) {
state = 0;
comments.push(scanner.getTokenText());
}
indent = 0;
break;
case 57:
break;
case 5:
if (state === 2) {
pushComment(scanner.getTokenText());
}
else {
var whitespace = scanner.getTokenText();
if (margin !== undefined && indent + whitespace.length > margin) {
comments.push(whitespace.slice(margin - indent - 1));
}
indent += whitespace.length;
}
break;
case 39:
if (state === 0) {
state = 1;
indent += scanner.getTokenText().length;
break;
}
default:
state = 2;
pushComment(scanner.getTokenText());
break;
}
if (token() === 57) {
break;
}
nextJSDocToken();
}
removeLeadingNewlines(comments);
removeTrailingNewlines(comments);
return comments;
}
function parseUnknownTag(atToken, tagName) {
var result = createNode(276, atToken.pos);
result.atToken = atToken;
result.tagName = tagName;
return finishNode(result);
}
function addTag(tag, comments) {
tag.comment = comments.join("");
if (!tags) {
tags = [tag];
tagsPos = tag.pos;
}
else {
tags.push(tag);
}
tagsEnd = tag.end;
}
function tryParseTypeExpression() {
skipWhitespace();
return token() === 17 ? parseJSDocTypeExpression() : undefined;
}
function parseBracketNameInPropertyAndParamTag() {
var isBracketed = parseOptional(21);
var name = parseJSDocEntityName();
if (isBracketed) {
skipWhitespace();
if (parseOptionalToken(58)) {
parseExpression();
}
parseExpected(22);
}
return { name: name, isBracketed: isBracketed };
}
function isObjectOrObjectArrayTypeReference(node) {
switch (node.kind) {
case 134:
return true;
case 164:
return isObjectOrObjectArrayTypeReference(node.elementType);
default:
return ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName) && node.typeName.escapedText === "Object";
}
}
function parseParameterOrPropertyTag(atToken, tagName, target) {
var typeExpression = tryParseTypeExpression();
var isNameFirst = !typeExpression;
skipWhitespace();
var _a = parseBracketNameInPropertyAndParamTag(), name = _a.name, isBracketed = _a.isBracketed;
skipWhitespace();
if (isNameFirst) {
typeExpression = tryParseTypeExpression();
}
var result = target === 1 ?
createNode(279, atToken.pos) :
createNode(284, atToken.pos);
var nestedTypeLiteral = parseNestedTypeLiteral(typeExpression, name);
if (nestedTypeLiteral) {
typeExpression = nestedTypeLiteral;
isNameFirst = true;
}
result.atToken = atToken;
result.tagName = tagName;
result.typeExpression = typeExpression;
result.name = name;
result.isNameFirst = isNameFirst;
result.isBracketed = isBracketed;
return finishNode(result);
}
function parseNestedTypeLiteral(typeExpression, name) {
if (typeExpression && isObjectOrObjectArrayTypeReference(typeExpression.type)) {
var typeLiteralExpression = createNode(267, scanner.getTokenPos());
var child = void 0;
var jsdocTypeLiteral = void 0;
var start_2 = scanner.getStartPos();
var children = void 0;
while (child = tryParse(function () { return parseChildParameterOrPropertyTag(1, name); })) {
if (!children) {
children = [];
}
children.push(child);
}
if (children) {
jsdocTypeLiteral = createNode(285, start_2);
jsdocTypeLiteral.jsDocPropertyTags = children;
if (typeExpression.type.kind === 164) {
jsdocTypeLiteral.isArrayType = true;
}
typeLiteralExpression.type = finishNode(jsdocTypeLiteral);
return finishNode(typeLiteralExpression);
}
}
}
function parseReturnTag(atToken, tagName) {
if (ts.forEach(tags, function (t) { return t.kind === 280; })) {
parseErrorAtPosition(tagName.pos, scanner.getTokenPos() - tagName.pos, ts.Diagnostics._0_tag_already_specified, tagName.escapedText);
}
var result = createNode(280, atToken.pos);
result.atToken = atToken;
result.tagName = tagName;
result.typeExpression = tryParseTypeExpression();
return finishNode(result);
}
function parseTypeTag(atToken, tagName) {
if (ts.forEach(tags, function (t) { return t.kind === 281; })) {
parseErrorAtPosition(tagName.pos, scanner.getTokenPos() - tagName.pos, ts.Diagnostics._0_tag_already_specified, tagName.escapedText);
}
var result = createNode(281, atToken.pos);
result.atToken = atToken;
result.tagName = tagName;
result.typeExpression = parseJSDocTypeExpression(true);
return finishNode(result);
}
function parseAugmentsTag(atToken, tagName) {
var result = createNode(277, atToken.pos);
result.atToken = atToken;
result.tagName = tagName;
result.class = parseExpressionWithTypeArgumentsForAugments();
return finishNode(result);
}
function parseExpressionWithTypeArgumentsForAugments() {
var usedBrace = parseOptional(17);
var node = createNode(201);
node.expression = parsePropertyAccessEntityNameExpression();
node.typeArguments = tryParseTypeArguments();
var res = finishNode(node);
if (usedBrace) {
parseExpected(18);
}
return res;
}
function parsePropertyAccessEntityNameExpression() {
var node = parseJSDocIdentifierName(true);
while (parseOptional(23)) {
var prop = createNode(179, node.pos);
prop.expression = node;
prop.name = parseJSDocIdentifierName();
node = finishNode(prop);
}
return node;
}
function parseClassTag(atToken, tagName) {
var tag = createNode(278, atToken.pos);
tag.atToken = atToken;
tag.tagName = tagName;
return finishNode(tag);
}
function parseTypedefTag(atToken, tagName) {
var typeExpression = tryParseTypeExpression();
skipWhitespace();
var typedefTag = createNode(283, atToken.pos);
typedefTag.atToken = atToken;
typedefTag.tagName = tagName;
typedefTag.fullName = parseJSDocTypeNameWithNamespace(0);
if (typedefTag.fullName) {
var rightNode = typedefTag.fullName;
while (true) {
if (rightNode.kind === 71 || !rightNode.body) {
typedefTag.name = rightNode.kind === 71 ? rightNode : rightNode.name;
break;
}
rightNode = rightNode.body;
}
}
skipWhitespace();
typedefTag.typeExpression = typeExpression;
if (!typeExpression || isObjectOrObjectArrayTypeReference(typeExpression.type)) {
var child = void 0;
var jsdocTypeLiteral = void 0;
var childTypeTag = void 0;
var start_3 = scanner.getStartPos();
while (child = tryParse(function () { return parseChildParameterOrPropertyTag(0); })) {
if (!jsdocTypeLiteral) {
jsdocTypeLiteral = createNode(285, start_3);
}
if (child.kind === 281) {
if (childTypeTag) {
break;
}
else {
childTypeTag = child;
}
}
else {
if (!jsdocTypeLiteral.jsDocPropertyTags) {
jsdocTypeLiteral.jsDocPropertyTags = [];
}
jsdocTypeLiteral.jsDocPropertyTags.push(child);
}
}
if (jsdocTypeLiteral) {
if (typeExpression && typeExpression.type.kind === 164) {
jsdocTypeLiteral.isArrayType = true;
}
typedefTag.typeExpression = childTypeTag && childTypeTag.typeExpression && !isObjectOrObjectArrayTypeReference(childTypeTag.typeExpression.type) ?
childTypeTag.typeExpression :
finishNode(jsdocTypeLiteral);
}
}
return finishNode(typedefTag);
function parseJSDocTypeNameWithNamespace(flags) {
var pos = scanner.getTokenPos();
var typeNameOrNamespaceName = parseJSDocIdentifierName();
if (typeNameOrNamespaceName && parseOptional(23)) {
var jsDocNamespaceNode = createNode(233, pos);
jsDocNamespaceNode.flags |= flags;
jsDocNamespaceNode.name = typeNameOrNamespaceName;
jsDocNamespaceNode.body = parseJSDocTypeNameWithNamespace(4);
return finishNode(jsDocNamespaceNode);
}
if (typeNameOrNamespaceName && flags & 4) {
typeNameOrNamespaceName.isInJSDocNamespace = true;
}
return typeNameOrNamespaceName;
}
}
function escapedTextsEqual(a, b) {
while (!ts.isIdentifier(a) || !ts.isIdentifier(b)) {
if (!ts.isIdentifier(a) && !ts.isIdentifier(b) && a.right.escapedText === b.right.escapedText) {
a = a.left;
b = b.left;
}
else {
return false;
}
}
return a.escapedText === b.escapedText;
}
function parseChildParameterOrPropertyTag(target, name) {
var canParseTag = true;
var seenAsterisk = false;
while (true) {
nextJSDocToken();
switch (token()) {
case 57:
if (canParseTag) {
var child = tryParseChildTag(target);
if (child && child.kind === 279 &&
(ts.isIdentifier(child.name) || !escapedTextsEqual(name, child.name.left))) {
return false;
}
return child;
}
seenAsterisk = false;
break;
case 4:
canParseTag = true;
seenAsterisk = false;
break;
case 39:
if (seenAsterisk) {
canParseTag = false;
}
seenAsterisk = true;
break;
case 71:
canParseTag = false;
break;
case 1:
return false;
}
}
}
function tryParseChildTag(target) {
ts.Debug.assert(token() === 57);
var atToken = createNode(57, scanner.getStartPos());
atToken.end = scanner.getTextPos();
nextJSDocToken();
var tagName = parseJSDocIdentifierName();
skipWhitespace();
if (!tagName) {
return false;
}
switch (tagName.escapedText) {
case "type":
return target === 0 && parseTypeTag(atToken, tagName);
case "prop":
case "property":
return target === 0 && parseParameterOrPropertyTag(atToken, tagName, target);
case "arg":
case "argument":
case "param":
return target === 1 && parseParameterOrPropertyTag(atToken, tagName, target);
}
return false;
}
function parseTemplateTag(atToken, tagName) {
if (ts.forEach(tags, function (t) { return t.kind === 282; })) {
parseErrorAtPosition(tagName.pos, scanner.getTokenPos() - tagName.pos, ts.Diagnostics._0_tag_already_specified, tagName.escapedText);
}
var typeParameters = [];
var typeParametersPos = getNodePos();
while (true) {
var name = parseJSDocIdentifierName();
skipWhitespace();
if (!name) {
parseErrorAtPosition(scanner.getStartPos(), 0, ts.Diagnostics.Identifier_expected);
return undefined;
}
var typeParameter = createNode(145, name.pos);
typeParameter.name = name;
finishNode(typeParameter);
typeParameters.push(typeParameter);
if (token() === 26) {
nextJSDocToken();
skipWhitespace();
}
else {
break;
}
}
var result = createNode(282, atToken.pos);
result.atToken = atToken;
result.tagName = tagName;
result.typeParameters = createNodeArray(typeParameters, typeParametersPos);
finishNode(result);
return result;
}
function nextJSDocToken() {
return currentToken = scanner.scanJSDocToken();
}
function parseJSDocEntityName() {
var entity = parseJSDocIdentifierName(true);
if (parseOptional(21)) {
parseExpected(22);
}
while (parseOptional(23)) {
var name = parseJSDocIdentifierName(true);
if (parseOptional(21)) {
parseExpected(22);
}
entity = createQualifiedName(entity, name);
}
return entity;
}
function parseJSDocIdentifierName(createIfMissing) {
if (createIfMissing === void 0) { createIfMissing = false; }
if (!ts.tokenIsIdentifierOrKeyword(token())) {
if (createIfMissing) {
return createMissingNode(71, true, ts.Diagnostics.Identifier_expected);
}
else {
parseErrorAtCurrentToken(ts.Diagnostics.Identifier_expected);
return undefined;
}
}
var pos = scanner.getTokenPos();
var end = scanner.getTextPos();
var result = createNode(71, pos);
result.escapedText = ts.escapeLeadingUnderscores(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;
}
node.pos += delta;
node.end += delta;
if (aggressiveChecks && shouldCheckNode(node)) {
ts.Debug.assert(text === newText.substring(node.pos, node.end));
}
forEachChild(node, visitNode, visitArray);
if (ts.hasJSDocNodes(node)) {
for (var _i = 0, _a = node.jsDoc; _i < _a.length; _i++) {
var jsDocComment = _a[_i];
forEachChild(jsDocComment, visitNode, visitArray);
}
}
checkNodePositions(node, aggressiveChecks);
}
function visitArray(array) {
array._children = undefined;
array.pos += delta;
array.end += delta;
for (var _i = 0, array_8 = array; _i < array_8.length; _i++) {
var node = array_8[_i];
visitNode(node);
}
}
}
function shouldCheckNode(node) {
switch (node.kind) {
case 9:
case 8:
case 71:
return true;
}
return false;
}
function adjustIntersectingElement(element, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta) {
ts.Debug.assert(element.end >= changeStart, "Adjusting an element that was entirely before the change range");
ts.Debug.assert(element.pos <= changeRangeOldEnd, "Adjusting an element that was entirely after the change range");
ts.Debug.assert(element.pos <= element.end);
element.pos = Math.min(element.pos, changeRangeNewEnd);
if (element.end >= changeRangeOldEnd) {
element.end += delta;
}
else {
element.end = Math.min(element.end, changeRangeNewEnd);
}
ts.Debug.assert(element.pos <= element.end);
if (element.parent) {
ts.Debug.assert(element.pos >= element.parent.pos);
ts.Debug.assert(element.end <= element.parent.end);
}
}
function checkNodePositions(node, aggressiveChecks) {
if (aggressiveChecks) {
var pos_2 = node.pos;
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_9 = array; _i < array_9.length; _i++) {
var node = array_9[_i];
visitNode(node);
}
return;
}
ts.Debug.assert(fullEnd < changeStart);
}
}
function extendToAffectedRange(sourceFile, changeRange) {
var maxLookahead = 1;
var start = changeRange.span.start;
for (var i = 0; start > 0 && i <= maxLookahead; i++) {
var nearestNode = findNearestNodeStartingBeforeOrAtPosition(sourceFile, start);
ts.Debug.assert(nearestNode.pos <= start);
var position = nearestNode.pos;
start = Math.max(0, position - 1);
}
var finalSpan = ts.createTextSpanFromBounds(start, ts.textSpanEnd(changeRange.span));
var finalLength = changeRange.newLength + (changeRange.span.start - start);
return ts.createTextChangeRange(finalSpan, finalLength);
}
function findNearestNodeStartingBeforeOrAtPosition(sourceFile, position) {
var bestResult = sourceFile;
var lastNodeEntirelyBeforePosition;
forEachChild(sourceFile, visit);
if (lastNodeEntirelyBeforePosition) {
var lastChildOfLastEntireNodeBeforePosition = 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; i < array.length; i++) {
var child = array[i];
if (child) {
if (child.pos === position) {
currentArray = array;
currentArrayIndex = i;
current = child;
return true;
}
else {
if (child.pos < position && position < child.end) {
forEachChild(child, visitNode, visitArray);
return true;
}
}
}
}
}
return false;
}
}
}
})(IncrementalParser || (IncrementalParser = {}));
})(ts || (ts = {}));
var ts;
(function (ts) {
function getModuleInstanceState(node) {
if (node.kind === 230 || node.kind === 231) {
return 0;
}
else if (ts.isConstEnumDeclaration(node)) {
return 2;
}
else if ((node.kind === 238 || node.kind === 237) && !(ts.hasModifier(node, 1))) {
return 0;
}
else if (node.kind === 234) {
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 === 233) {
var body = node.body;
return body ? getModuleInstanceState(body) : 1;
}
else if (node.kind === 71 && node.isInJSDocNamespace) {
return 0;
}
else {
return 1;
}
}
ts.getModuleInstanceState = getModuleInstanceState;
var binder = createBinder();
function bindSourceFile(file, options) {
ts.performance.mark("beforeBind");
binder(file, options);
ts.performance.mark("afterBind");
ts.performance.measure("Bind", "beforeBind", "afterBind");
}
ts.bindSourceFile = bindSourceFile;
function createBinder() {
var file;
var options;
var languageVersion;
var parent;
var container;
var blockScopeContainer;
var lastContainer;
var seenThisKeyword;
var currentFlow;
var currentBreakTarget;
var currentContinueTarget;
var currentReturnTarget;
var currentTrueTarget;
var currentFalseTarget;
var preSwitchCaseFlow;
var activeLabels;
var hasExplicitReturn;
var emitFlags;
var inStrictMode;
var symbolCount = 0;
var Symbol;
var classifiableNames;
var unreachableFlow = { flags: 1 };
var reportedUnreachableFlow = { flags: 1 };
var subtreeTransformFlags = 0;
var skipTransformFlagAggregation;
function createDiagnosticForNode(node, message, arg0, arg1, arg2) {
return ts.createDiagnosticForNodeInSourceFile(ts.getSourceFileOfNode(node) || file, node, message, arg0, arg1, arg2);
}
function bindSourceFile(f, opts) {
file = f;
options = opts;
languageVersion = ts.getEmitScriptTarget(options);
inStrictMode = bindInStrictMode(file, opts);
classifiableNames = ts.createUnderscoreEscapedMap();
symbolCount = 0;
skipTransformFlagAggregation = file.isDeclarationFile;
Symbol = ts.objectAllocator.getSymbolConstructor();
if (!file.locals) {
bind(file);
file.symbolCount = symbolCount;
file.classifiableNames = classifiableNames;
}
file = undefined;
options = undefined;
languageVersion = undefined;
parent = undefined;
container = undefined;
blockScopeContainer = undefined;
lastContainer = undefined;
seenThisKeyword = false;
currentFlow = undefined;
currentBreakTarget = undefined;
currentContinueTarget = undefined;
currentReturnTarget = undefined;
currentTrueTarget = undefined;
currentFalseTarget = undefined;
activeLabels = undefined;
hasExplicitReturn = false;
emitFlags = 0;
subtreeTransformFlags = 0;
}
return bindSourceFile;
function bindInStrictMode(file, opts) {
if ((opts.alwaysStrict === undefined ? opts.strict : opts.alwaysStrict) && !file.isDeclarationFile) {
return true;
}
else {
return !!file.externalModuleIndicator;
}
}
function createSymbol(flags, name) {
symbolCount++;
return new Symbol(flags, name);
}
function addDeclarationToSymbol(symbol, node, symbolFlags) {
symbol.flags |= symbolFlags;
node.symbol = symbol;
if (!symbol.declarations) {
symbol.declarations = [node];
}
else {
symbol.declarations.push(node);
}
if (symbolFlags & 1952 && !symbol.exports) {
symbol.exports = ts.createSymbolTable();
}
if (symbolFlags & 6240 && !symbol.members) {
symbol.members = ts.createSymbolTable();
}
if (symbolFlags & 107455) {
var valueDeclaration = symbol.valueDeclaration;
if (!valueDeclaration ||
(valueDeclaration.kind !== node.kind && valueDeclaration.kind === 233)) {
symbol.valueDeclaration = node;
}
}
}
function getDeclarationName(node) {
if (node.kind === 243) {
return node.isExportEquals ? "export=" : "default";
}
var name = ts.getNameOfDeclaration(node);
if (name) {
if (ts.isAmbientModule(node)) {
var moduleName = ts.getTextOfIdentifierOrLiteral(name);
return (ts.isGlobalScopeAugmentation(node) ? "__global" : "\"" + moduleName + "\"");
}
if (name.kind === 144) {
var nameExpression = name.expression;
if (ts.isStringOrNumericLiteral(nameExpression)) {
return ts.escapeLeadingUnderscores(nameExpression.text);
}
ts.Debug.assert(ts.isWellKnownSymbolSyntactically(nameExpression));
return ts.getPropertyNameForKnownSymbolName(ts.idText(nameExpression.name));
}
return ts.getEscapedTextOfIdentifierOrLiteral(name);
}
switch (node.kind) {
case 152:
return "__constructor";
case 160:
case 155:
return "__call";
case 161:
case 156:
return "__new";
case 157:
return "__index";
case 244:
return "__export";
case 194:
if (ts.getSpecialPropertyAssignmentKind(node) === 2) {
return "export=";
}
ts.Debug.fail("Unknown binary declaration kind");
break;
case 228:
case 229:
return (ts.hasModifier(node, 512) ? "default" : undefined);
case 273:
return (ts.isJSDocConstructSignature(node) ? "__new" : "__call");
case 146:
ts.Debug.assert(node.parent.kind === 273);
var functionType = node.parent;
var index = ts.indexOf(functionType.parameters, node);
return "arg" + index;
case 283:
var name_2 = ts.getNameOfJSDocTypedef(node);
return typeof name_2 !== "undefined" ? name_2.escapedText : undefined;
}
}
function getDisplayName(node) {
return node.name ? ts.declarationNameToString(node.name) : ts.unescapeLeadingUnderscores(getDeclarationName(node));
}
function declareSymbol(symbolTable, parent, node, includes, excludes, isReplaceableByMethod) {
ts.Debug.assert(!ts.hasDynamicName(node));
var isDefaultExport = ts.hasModifier(node, 512);
var name = isDefaultExport && parent ? "default" : getDeclarationName(node);
var symbol;
if (name === undefined) {
symbol = createSymbol(0, "__missing");
}
else {
symbol = symbolTable.get(name);
if (includes & 788448) {
classifiableNames.set(name, true);
}
if (!symbol) {
symbolTable.set(name, symbol = createSymbol(0, name));
if (isReplaceableByMethod)
symbol.isReplaceableByMethod = true;
}
else if (isReplaceableByMethod && !symbol.isReplaceableByMethod) {
return symbol;
}
else if (symbol.flags & excludes) {
if (symbol.isReplaceableByMethod) {
symbolTable.set(name, symbol = createSymbol(0, name));
}
else {
if (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;
if (symbol.declarations && symbol.declarations.length) {
if (isDefaultExport) {
message_1 = ts.Diagnostics.A_module_cannot_have_multiple_default_exports;
}
else {
if (symbol.declarations && symbol.declarations.length &&
(isDefaultExport || (node.kind === 243 && !node.isExportEquals))) {
message_1 = ts.Diagnostics.A_module_cannot_have_multiple_default_exports;
}
}
}
ts.forEach(symbol.declarations, function (declaration) {
file.bindDiagnostics.push(createDiagnosticForNode(ts.getNameOfDeclaration(declaration) || declaration, message_1, getDisplayName(declaration)));
});
file.bindDiagnostics.push(createDiagnosticForNode(ts.getNameOfDeclaration(node) || node, message_1, getDisplayName(node)));
symbol = createSymbol(0, name);
}
}
}
addDeclarationToSymbol(symbol, node, includes);
symbol.parent = parent;
return symbol;
}
function declareModuleMember(node, symbolFlags, symbolExcludes) {
var hasExportModifier = ts.getCombinedModifierFlags(node) & 1;
if (symbolFlags & 2097152) {
if (node.kind === 246 || (node.kind === 237 && hasExportModifier)) {
return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes);
}
else {
return declareSymbol(container.locals, undefined, node, symbolFlags, symbolExcludes);
}
}
else {
if (node.kind === 283)
ts.Debug.assert(ts.isInJavaScriptFile(node));
var isJSDocTypedefInJSDocNamespace = node.kind === 283 &&
node.name &&
node.name.kind === 71 &&
node.name.isInJSDocNamespace;
if ((!ts.isAmbientModule(node) && (hasExportModifier || container.flags & 32)) || isJSDocTypedefInJSDocNamespace) {
var exportKind = symbolFlags & 107455 ? 1048576 : 0;
var local = declareSymbol(container.locals, undefined, node, exportKind, symbolExcludes);
local.exportSymbol = declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes);
node.localSymbol = local;
return local;
}
else {
return declareSymbol(container.locals, undefined, node, symbolFlags, symbolExcludes);
}
}
}
function bindContainer(node, containerFlags) {
var saveContainer = container;
var savedBlockScopeContainer = blockScopeContainer;
if (containerFlags & 1) {
container = blockScopeContainer = node;
if (containerFlags & 32) {
container.locals = ts.createSymbolTable();
}
addToContainerChain(container);
}
else if (containerFlags & 2) {
blockScopeContainer = node;
blockScopeContainer.locals = undefined;
}
if (containerFlags & 4) {
var saveCurrentFlow = currentFlow;
var saveBreakTarget = currentBreakTarget;
var saveContinueTarget = currentContinueTarget;
var saveReturnTarget = currentReturnTarget;
var saveActiveLabels = activeLabels;
var saveHasExplicitReturn = hasExplicitReturn;
var isIIFE = containerFlags & 16 && !ts.hasModifier(node, 256) && !!ts.getImmediatelyInvokedFunctionExpression(node);
if (isIIFE) {
currentReturnTarget = createBranchLabel();
}
else {
currentFlow = { flags: 2 };
if (containerFlags & (16 | 128)) {
currentFlow.container = node;
}
currentReturnTarget = undefined;
}
currentBreakTarget = undefined;
currentContinueTarget = undefined;
activeLabels = undefined;
hasExplicitReturn = false;
bindChildren(node);
node.flags &= ~1408;
if (!(currentFlow.flags & 1) && containerFlags & 8 && ts.nodeIsPresent(node.body)) {
node.flags |= 128;
if (hasExplicitReturn)
node.flags |= 256;
}
if (node.kind === 265) {
node.flags |= emitFlags;
}
if (isIIFE) {
addAntecedent(currentReturnTarget, currentFlow);
currentFlow = finishFlowLabel(currentReturnTarget);
}
else {
currentFlow = saveCurrentFlow;
}
currentBreakTarget = saveBreakTarget;
currentContinueTarget = saveContinueTarget;
currentReturnTarget = saveReturnTarget;
activeLabels = saveActiveLabels;
hasExplicitReturn = saveHasExplicitReturn;
}
else if (containerFlags & 64) {
seenThisKeyword = false;
bindChildren(node);
node.flags = seenThisKeyword ? node.flags | 64 : node.flags & ~64;
}
else {
bindChildren(node);
}
container = saveContainer;
blockScopeContainer = savedBlockScopeContainer;
}
function bindChildren(node) {
if (skipTransformFlagAggregation) {
bindChildrenWorker(node);
}
else if (node.transformFlags & 536870912) {
skipTransformFlagAggregation = true;
bindChildrenWorker(node);
skipTransformFlagAggregation = false;
subtreeTransformFlags |= node.transformFlags & ~getTransformFlagsSubtreeExclusions(node.kind);
}
else {
var savedSubtreeTransformFlags = subtreeTransformFlags;
subtreeTransformFlags = 0;
bindChildrenWorker(node);
subtreeTransformFlags = savedSubtreeTransformFlags | computeTransformFlagsForNode(node, subtreeTransformFlags);
}
}
function bindEach(nodes) {
if (nodes === undefined) {
return;
}
if (skipTransformFlagAggregation) {
ts.forEach(nodes, bind);
}
else {
var savedSubtreeTransformFlags = subtreeTransformFlags;
subtreeTransformFlags = 0;
var nodeArrayFlags = 0;
for (var _i = 0, nodes_2 = nodes; _i < nodes_2.length; _i++) {
var node = nodes_2[_i];
bind(node);
nodeArrayFlags |= node.transformFlags & ~536870912;
}
nodes.transformFlags = nodeArrayFlags | 536870912;
subtreeTransformFlags |= savedSubtreeTransformFlags;
}
}
function bindEachChild(node) {
ts.forEachChild(node, bind, bindEach);
}
function bindChildrenWorker(node) {
if (ts.hasJSDocNodes(node)) {
if (ts.isInJavaScriptFile(node)) {
for (var _i = 0, _a = node.jsDoc; _i < _a.length; _i++) {
var j = _a[_i];
bind(j);
}
}
else {
for (var _b = 0, _c = node.jsDoc; _b < _c.length; _b++) {
var j = _c[_b];
setParentPointers(node, j);
}
}
}
if (checkUnreachable(node)) {
bindEachChild(node);
return;
}
switch (node.kind) {
case 213:
bindWhileStatement(node);
break;
case 212:
bindDoStatement(node);
break;
case 214:
bindForStatement(node);
break;
case 215:
case 216:
bindForInOrForOfStatement(node);
break;
case 211:
bindIfStatement(node);
break;
case 219:
case 223:
bindReturnOrThrow(node);
break;
case 218:
case 217:
bindBreakOrContinueStatement(node);
break;
case 224:
bindTryStatement(node);
break;
case 221:
bindSwitchStatement(node);
break;
case 235:
bindCaseBlock(node);
break;
case 257:
bindCaseClause(node);
break;
case 222:
bindLabeledStatement(node);
break;
case 192:
bindPrefixUnaryExpressionFlow(node);
break;
case 193:
bindPostfixUnaryExpressionFlow(node);
break;
case 194:
bindBinaryExpressionFlow(node);
break;
case 188:
bindDeleteExpressionFlow(node);
break;
case 195:
bindConditionalExpressionFlow(node);
break;
case 226:
bindVariableDeclarationFlow(node);
break;
case 181:
bindCallExpressionFlow(node);
break;
case 275:
bindJSDocComment(node);
break;
case 283:
bindJSDocTypedefTag(node);
break;
default:
bindEachChild(node);
break;
}
}
function isNarrowingExpression(expr) {
switch (expr.kind) {
case 71:
case 99:
case 179:
return isNarrowableReference(expr);
case 181:
return hasNarrowableArgument(expr);
case 185:
return isNarrowingExpression(expr.expression);
case 194:
return isNarrowingBinaryExpression(expr);
case 192:
return expr.operator === 51 && isNarrowingExpression(expr.operand);
}
return false;
}
function isNarrowableReference(expr) {
return expr.kind === 71 ||
expr.kind === 99 ||
expr.kind === 97 ||
expr.kind === 179 && isNarrowableReference(expr.expression);
}
function hasNarrowableArgument(expr) {
if (expr.arguments) {
for (var _i = 0, _a = expr.arguments; _i < _a.length; _i++) {
var argument = _a[_i];
if (isNarrowableReference(argument)) {
return true;
}
}
}
if (expr.expression.kind === 179 &&
isNarrowableReference(expr.expression.expression)) {
return true;
}
return false;
}
function isNarrowingTypeofOperands(expr1, expr2) {
return expr1.kind === 189 && isNarrowableOperand(expr1.expression) && expr2.kind === 9;
}
function isNarrowingBinaryExpression(expr) {
switch (expr.operatorToken.kind) {
case 58:
return isNarrowableReference(expr.left);
case 32:
case 33:
case 34:
case 35:
return isNarrowableOperand(expr.left) || isNarrowableOperand(expr.right) ||
isNarrowingTypeofOperands(expr.right, expr.left) || isNarrowingTypeofOperands(expr.left, expr.right);
case 93:
return isNarrowableOperand(expr.left);
case 26:
return isNarrowingExpression(expr.right);
}
return false;
}
function isNarrowableOperand(expr) {
switch (expr.kind) {
case 185:
return isNarrowableOperand(expr.expression);
case 194:
switch (expr.operatorToken.kind) {
case 58:
return isNarrowableOperand(expr.left);
case 26:
return isNarrowableOperand(expr.right);
}
}
return isNarrowableReference(expr);
}
function createBranchLabel() {
return {
flags: 4,
antecedents: undefined
};
}
function createLoopLabel() {
return {
flags: 8,
antecedents: undefined
};
}
function setFlowNodeReferenced(flow) {
flow.flags |= flow.flags & 512 ? 1024 : 512;
}
function addAntecedent(label, antecedent) {
if (!(antecedent.flags & 1) && !ts.contains(label.antecedents, antecedent)) {
(label.antecedents || (label.antecedents = [])).push(antecedent);
setFlowNodeReferenced(antecedent);
}
}
function createFlowCondition(flags, antecedent, expression) {
if (antecedent.flags & 1) {
return antecedent;
}
if (!expression) {
return flags & 32 ? antecedent : unreachableFlow;
}
if (expression.kind === 101 && flags & 64 ||
expression.kind === 86 && flags & 32) {
return unreachableFlow;
}
if (!isNarrowingExpression(expression)) {
return antecedent;
}
setFlowNodeReferenced(antecedent);
return { flags: flags, expression: expression, antecedent: antecedent };
}
function createFlowSwitchClause(antecedent, switchStatement, clauseStart, clauseEnd) {
if (!isNarrowingExpression(switchStatement.expression)) {
return antecedent;
}
setFlowNodeReferenced(antecedent);
return { flags: 128, switchStatement: switchStatement, clauseStart: clauseStart, clauseEnd: clauseEnd, antecedent: antecedent };
}
function createFlowAssignment(antecedent, node) {
setFlowNodeReferenced(antecedent);
return { flags: 16, antecedent: antecedent, node: node };
}
function createFlowArrayMutation(antecedent, node) {
setFlowNodeReferenced(antecedent);
var res = { flags: 256, antecedent: antecedent, node: node };
return res;
}
function finishFlowLabel(flow) {
var antecedents = flow.antecedents;
if (!antecedents) {
return unreachableFlow;
}
if (antecedents.length === 1) {
return antecedents[0];
}
return flow;
}
function isStatementCondition(node) {
var parent = node.parent;
switch (parent.kind) {
case 211:
case 213:
case 212:
return parent.expression === node;
case 214:
case 195:
return parent.condition === node;
}
return false;
}
function isLogicalExpression(node) {
while (true) {
if (node.kind === 185) {
node = node.expression;
}
else if (node.kind === 192 && node.operator === 51) {
node = node.operand;
}
else {
return node.kind === 194 && (node.operatorToken.kind === 53 ||
node.operatorToken.kind === 54);
}
}
}
function isTopLevelLogicalExpression(node) {
while (node.parent.kind === 185 ||
node.parent.kind === 192 &&
node.parent.operator === 51) {
node = node.parent;
}
return !isStatementCondition(node) && !isLogicalExpression(node.parent);
}
function bindCondition(node, trueTarget, falseTarget) {
var saveTrueTarget = currentTrueTarget;
var saveFalseTarget = currentFalseTarget;
currentTrueTarget = trueTarget;
currentFalseTarget = falseTarget;
bind(node);
currentTrueTarget = saveTrueTarget;
currentFalseTarget = saveFalseTarget;
if (!node || !isLogicalExpression(node)) {
addAntecedent(trueTarget, createFlowCondition(32, currentFlow, node));
addAntecedent(falseTarget, createFlowCondition(64, currentFlow, node));
}
}
function bindIterativeStatement(node, breakTarget, continueTarget) {
var saveBreakTarget = currentBreakTarget;
var saveContinueTarget = currentContinueTarget;
currentBreakTarget = breakTarget;
currentContinueTarget = continueTarget;
bind(node);
currentBreakTarget = saveBreakTarget;
currentContinueTarget = saveContinueTarget;
}
function bindWhileStatement(node) {
var preWhileLabel = createLoopLabel();
var preBodyLabel = createBranchLabel();
var postWhileLabel = createBranchLabel();
addAntecedent(preWhileLabel, currentFlow);
currentFlow = preWhileLabel;
bindCondition(node.expression, preBodyLabel, postWhileLabel);
currentFlow = finishFlowLabel(preBodyLabel);
bindIterativeStatement(node.statement, postWhileLabel, preWhileLabel);
addAntecedent(preWhileLabel, currentFlow);
currentFlow = finishFlowLabel(postWhileLabel);
}
function bindDoStatement(node) {
var preDoLabel = createLoopLabel();
var enclosingLabeledStatement = node.parent.kind === 222
? ts.lastOrUndefined(activeLabels)
: undefined;
var preConditionLabel = enclosingLabeledStatement ? enclosingLabeledStatement.continueTarget : createBranchLabel();
var postDoLabel = enclosingLabeledStatement ? enclosingLabeledStatement.breakTarget : createBranchLabel();
addAntecedent(preDoLabel, currentFlow);
currentFlow = preDoLabel;
bindIterativeStatement(node.statement, postDoLabel, preConditionLabel);
addAntecedent(preConditionLabel, currentFlow);
currentFlow = finishFlowLabel(preConditionLabel);
bindCondition(node.expression, preDoLabel, postDoLabel);
currentFlow = finishFlowLabel(postDoLabel);
}
function bindForStatement(node) {
var preLoopLabel = createLoopLabel();
var preBodyLabel = createBranchLabel();
var postLoopLabel = createBranchLabel();
bind(node.initializer);
addAntecedent(preLoopLabel, currentFlow);
currentFlow = preLoopLabel;
bindCondition(node.condition, preBodyLabel, postLoopLabel);
currentFlow = finishFlowLabel(preBodyLabel);
bindIterativeStatement(node.statement, postLoopLabel, preLoopLabel);
bind(node.incrementor);
addAntecedent(preLoopLabel, currentFlow);
currentFlow = finishFlowLabel(postLoopLabel);
}
function bindForInOrForOfStatement(node) {
var preLoopLabel = createLoopLabel();
var postLoopLabel = createBranchLabel();
addAntecedent(preLoopLabel, currentFlow);
currentFlow = preLoopLabel;
if (node.kind === 216) {
bind(node.awaitModifier);
}
bind(node.expression);
addAntecedent(postLoopLabel, currentFlow);
bind(node.initializer);
if (node.initializer.kind !== 227) {
bindAssignmentTargetFlow(node.initializer);
}
bindIterativeStatement(node.statement, postLoopLabel, preLoopLabel);
addAntecedent(preLoopLabel, currentFlow);
currentFlow = finishFlowLabel(postLoopLabel);
}
function bindIfStatement(node) {
var thenLabel = createBranchLabel();
var elseLabel = createBranchLabel();
var postIfLabel = createBranchLabel();
bindCondition(node.expression, thenLabel, elseLabel);
currentFlow = finishFlowLabel(thenLabel);
bind(node.thenStatement);
addAntecedent(postIfLabel, currentFlow);
currentFlow = finishFlowLabel(elseLabel);
bind(node.elseStatement);
addAntecedent(postIfLabel, currentFlow);
currentFlow = finishFlowLabel(postIfLabel);
}
function bindReturnOrThrow(node) {
bind(node.expression);
if (node.kind === 219) {
hasExplicitReturn = true;
if (currentReturnTarget) {
addAntecedent(currentReturnTarget, currentFlow);
}
}
currentFlow = unreachableFlow;
}
function findActiveLabel(name) {
if (activeLabels) {
for (var _i = 0, activeLabels_1 = activeLabels; _i < activeLabels_1.length; _i++) {
var label = activeLabels_1[_i];
if (label.name === name) {
return label;
}
}
}
return undefined;
}
function bindBreakOrContinueFlow(node, breakTarget, continueTarget) {
var flowLabel = node.kind === 218 ? breakTarget : continueTarget;
if (flowLabel) {
addAntecedent(flowLabel, currentFlow);
currentFlow = unreachableFlow;
}
}
function bindBreakOrContinueStatement(node) {
bind(node.label);
if (node.label) {
var activeLabel = findActiveLabel(node.label.escapedText);
if (activeLabel) {
activeLabel.referenced = true;
bindBreakOrContinueFlow(node, activeLabel.breakTarget, activeLabel.continueTarget);
}
}
else {
bindBreakOrContinueFlow(node, currentBreakTarget, currentContinueTarget);
}
}
function bindTryStatement(node) {
var preFinallyLabel = createBranchLabel();
var preTryFlow = currentFlow;
bind(node.tryBlock);
addAntecedent(preFinallyLabel, currentFlow);
var flowAfterTry = currentFlow;
var flowAfterCatch = unreachableFlow;
if (node.catchClause) {
currentFlow = preTryFlow;
bind(node.catchClause);
addAntecedent(preFinallyLabel, currentFlow);
flowAfterCatch = currentFlow;
}
if (node.finallyBlock) {
var preFinallyFlow = { flags: 2048, antecedent: preTryFlow, lock: {} };
addAntecedent(preFinallyLabel, preFinallyFlow);
currentFlow = finishFlowLabel(preFinallyLabel);
bind(node.finallyBlock);
if (!(currentFlow.flags & 1)) {
if ((flowAfterTry.flags & 1) && (flowAfterCatch.flags & 1)) {
currentFlow = flowAfterTry === reportedUnreachableFlow || flowAfterCatch === reportedUnreachableFlow
? reportedUnreachableFlow
: unreachableFlow;
}
}
if (!(currentFlow.flags & 1)) {
var afterFinallyFlow = { flags: 4096, antecedent: currentFlow };
preFinallyFlow.lock = afterFinallyFlow;
currentFlow = afterFinallyFlow;
}
}
else {
currentFlow = finishFlowLabel(preFinallyLabel);
}
}
function bindSwitchStatement(node) {
var postSwitchLabel = createBranchLabel();
bind(node.expression);
var saveBreakTarget = currentBreakTarget;
var savePreSwitchCaseFlow = preSwitchCaseFlow;
currentBreakTarget = postSwitchLabel;
preSwitchCaseFlow = currentFlow;
bind(node.caseBlock);
addAntecedent(postSwitchLabel, currentFlow);
var hasDefault = ts.forEach(node.caseBlock.clauses, function (c) { return c.kind === 258; });
node.possiblyExhaustive = !hasDefault && !postSwitchLabel.antecedents;
if (!hasDefault) {
addAntecedent(postSwitchLabel, createFlowSwitchClause(preSwitchCaseFlow, node, 0, 0));
}
currentBreakTarget = saveBreakTarget;
preSwitchCaseFlow = savePreSwitchCaseFlow;
currentFlow = finishFlowLabel(postSwitchLabel);
}
function bindCaseBlock(node) {
var savedSubtreeTransformFlags = subtreeTransformFlags;
subtreeTransformFlags = 0;
var clauses = node.clauses;
var fallthroughFlow = unreachableFlow;
for (var i = 0; i < clauses.length; i++) {
var clauseStart = i;
while (!clauses[i].statements.length && i + 1 < clauses.length) {
bind(clauses[i]);
i++;
}
var preCaseLabel = createBranchLabel();
addAntecedent(preCaseLabel, createFlowSwitchClause(preSwitchCaseFlow, node.parent, clauseStart, i + 1));
addAntecedent(preCaseLabel, fallthroughFlow);
currentFlow = finishFlowLabel(preCaseLabel);
var clause = clauses[i];
bind(clause);
fallthroughFlow = currentFlow;
if (!(currentFlow.flags & 1) && i !== clauses.length - 1 && options.noFallthroughCasesInSwitch) {
errorOnFirstToken(clause, ts.Diagnostics.Fallthrough_case_in_switch);
}
}
clauses.transformFlags = subtreeTransformFlags | 536870912;
subtreeTransformFlags |= savedSubtreeTransformFlags;
}
function bindCaseClause(node) {
var saveCurrentFlow = currentFlow;
currentFlow = preSwitchCaseFlow;
bind(node.expression);
currentFlow = saveCurrentFlow;
bindEach(node.statements);
}
function pushActiveLabel(name, breakTarget, continueTarget) {
var activeLabel = {
name: name,
breakTarget: breakTarget,
continueTarget: continueTarget,
referenced: false
};
(activeLabels || (activeLabels = [])).push(activeLabel);
return activeLabel;
}
function popActiveLabel() {
activeLabels.pop();
}
function bindLabeledStatement(node) {
var preStatementLabel = createLoopLabel();
var postStatementLabel = createBranchLabel();
bind(node.label);
addAntecedent(preStatementLabel, currentFlow);
var activeLabel = pushActiveLabel(node.label.escapedText, postStatementLabel, preStatementLabel);
bind(node.statement);
popActiveLabel();
if (!activeLabel.referenced && !options.allowUnusedLabels) {
file.bindDiagnostics.push(createDiagnosticForNode(node.label, ts.Diagnostics.Unused_label));
}
if (!node.statement || node.statement.kind !== 212) {
addAntecedent(postStatementLabel, currentFlow);
currentFlow = finishFlowLabel(postStatementLabel);
}
}
function bindDestructuringTargetFlow(node) {
if (node.kind === 194 && node.operatorToken.kind === 58) {
bindAssignmentTargetFlow(node.left);
}
else {
bindAssignmentTargetFlow(node);
}
}
function bindAssignmentTargetFlow(node) {
if (isNarrowableReference(node)) {
currentFlow = createFlowAssignment(currentFlow, node);
}
else if (node.kind === 177) {
for (var _i = 0, _a = node.elements; _i < _a.length; _i++) {
var e = _a[_i];
if (e.kind === 198) {
bindAssignmentTargetFlow(e.expression);
}
else {
bindDestructuringTargetFlow(e);
}
}
}
else if (node.kind === 178) {
for (var _b = 0, _c = node.properties; _b < _c.length; _b++) {
var p = _c[_b];
if (p.kind === 261) {
bindDestructuringTargetFlow(p.initializer);
}
else if (p.kind === 262) {
bindAssignmentTargetFlow(p.name);
}
else if (p.kind === 263) {
bindAssignmentTargetFlow(p.expression);
}
}
}
}
function bindLogicalExpression(node, trueTarget, falseTarget) {
var preRightLabel = createBranchLabel();
if (node.operatorToken.kind === 53) {
bindCondition(node.left, preRightLabel, falseTarget);
}
else {
bindCondition(node.left, trueTarget, preRightLabel);
}
currentFlow = finishFlowLabel(preRightLabel);
bind(node.operatorToken);
bindCondition(node.right, trueTarget, falseTarget);
}
function bindPrefixUnaryExpressionFlow(node) {
if (node.operator === 51) {
var saveTrueTarget = currentTrueTarget;
currentTrueTarget = currentFalseTarget;
currentFalseTarget = saveTrueTarget;
bindEachChild(node);
currentFalseTarget = currentTrueTarget;
currentTrueTarget = saveTrueTarget;
}
else {
bindEachChild(node);
if (node.operator === 43 || node.operator === 44) {
bindAssignmentTargetFlow(node.operand);
}
}
}
function bindPostfixUnaryExpressionFlow(node) {
bindEachChild(node);
if (node.operator === 43 || node.operator === 44) {
bindAssignmentTargetFlow(node.operand);
}
}
function bindBinaryExpressionFlow(node) {
var operator = node.operatorToken.kind;
if (operator === 53 || operator === 54) {
if (isTopLevelLogicalExpression(node)) {
var postExpressionLabel = createBranchLabel();
bindLogicalExpression(node, postExpressionLabel, postExpressionLabel);
currentFlow = finishFlowLabel(postExpressionLabel);
}
else {
bindLogicalExpression(node, currentTrueTarget, currentFalseTarget);
}
}
else {
bindEachChild(node);
if (ts.isAssignmentOperator(operator) && !ts.isAssignmentTarget(node)) {
bindAssignmentTargetFlow(node.left);
if (operator === 58 && node.left.kind === 180) {
var elementAccess = node.left;
if (isNarrowableOperand(elementAccess.expression)) {
currentFlow = createFlowArrayMutation(currentFlow, node);
}
}
}
}
}
function bindDeleteExpressionFlow(node) {
bindEachChild(node);
if (node.expression.kind === 179) {
bindAssignmentTargetFlow(node.expression);
}
}
function bindConditionalExpressionFlow(node) {
var trueLabel = createBranchLabel();
var falseLabel = createBranchLabel();
var postExpressionLabel = createBranchLabel();
bindCondition(node.condition, trueLabel, falseLabel);
currentFlow = finishFlowLabel(trueLabel);
bind(node.questionToken);
bind(node.whenTrue);
addAntecedent(postExpressionLabel, currentFlow);
currentFlow = finishFlowLabel(falseLabel);
bind(node.colonToken);
bind(node.whenFalse);
addAntecedent(postExpressionLabel, currentFlow);
currentFlow = finishFlowLabel(postExpressionLabel);
}
function bindInitializedVariableFlow(node) {
var name = !ts.isOmittedExpression(node) ? node.name : undefined;
if (ts.isBindingPattern(name)) {
for (var _i = 0, _a = name.elements; _i < _a.length; _i++) {
var child = _a[_i];
bindInitializedVariableFlow(child);
}
}
else {
currentFlow = createFlowAssignment(currentFlow, node);
}
}
function bindVariableDeclarationFlow(node) {
bindEachChild(node);
if (node.initializer || ts.isForInOrOfStatement(node.parent.parent)) {
bindInitializedVariableFlow(node);
}
}
function bindJSDocComment(node) {
ts.forEachChild(node, function (n) {
if (n.kind !== 283) {
bind(n);
}
});
}
function bindJSDocTypedefTag(node) {
ts.forEachChild(node, function (n) {
if (node.fullName && n === node.name && node.fullName.kind !== 71) {
return;
}
bind(n);
});
}
function bindCallExpressionFlow(node) {
var expr = node.expression;
while (expr.kind === 185) {
expr = expr.expression;
}
if (expr.kind === 186 || expr.kind === 187) {
bindEach(node.typeArguments);
bindEach(node.arguments);
bind(node.expression);
}
else {
bindEachChild(node);
}
if (node.expression.kind === 179) {
var propertyAccess = node.expression;
if (isNarrowableOperand(propertyAccess.expression) && ts.isPushOrUnshiftIdentifier(propertyAccess.name)) {
currentFlow = createFlowArrayMutation(currentFlow, node);
}
}
}
function getContainerFlags(node) {
switch (node.kind) {
case 199:
case 229:
case 232:
case 178:
case 163:
case 285:
case 254:
return 1;
case 230:
return 1 | 64;
case 233:
case 231:
case 172:
return 1 | 32;
case 265:
return 1 | 4 | 32;
case 151:
if (ts.isObjectLiteralOrClassExpressionMethod(node)) {
return 1 | 4 | 32 | 8 | 128;
}
case 152:
case 228:
case 150:
case 153:
case 154:
case 155:
case 273:
case 160:
case 156:
case 157:
case 161:
return 1 | 4 | 32 | 8;
case 186:
case 187:
return 1 | 4 | 32 | 8 | 16;
case 234:
return 4;
case 149:
return node.initializer ? 4 : 0;
case 260:
case 214:
case 215:
case 216:
case 235:
return 2;
case 207:
return ts.isFunctionLike(node.parent) ? 0 : 2;
}
return 0;
}
function addToContainerChain(next) {
if (lastContainer) {
lastContainer.nextContainer = next;
}
lastContainer = next;
}
function declareSymbolAndAddToSymbolTable(node, symbolFlags, symbolExcludes) {
switch (container.kind) {
case 233:
return declareModuleMember(node, symbolFlags, symbolExcludes);
case 265:
return declareSourceFileMember(node, symbolFlags, symbolExcludes);
case 199:
case 229:
return declareClassMember(node, symbolFlags, symbolExcludes);
case 232:
return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes);
case 163:
case 285:
case 178:
case 230:
case 254:
return declareSymbol(container.symbol.members, container.symbol, node, symbolFlags, symbolExcludes);
case 160:
case 161:
case 155:
case 156:
case 157:
case 151:
case 150:
case 152:
case 153:
case 154:
case 228:
case 186:
case 187:
case 273:
case 231:
case 172:
return declareSymbol(container.locals, undefined, node, symbolFlags, symbolExcludes);
}
}
function declareClassMember(node, symbolFlags, symbolExcludes) {
return ts.hasModifier(node, 32)
? declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes)
: declareSymbol(container.symbol.members, container.symbol, node, symbolFlags, symbolExcludes);
}
function declareSourceFileMember(node, symbolFlags, symbolExcludes) {
return ts.isExternalModule(file)
? declareModuleMember(node, symbolFlags, symbolExcludes)
: declareSymbol(file.locals, undefined, node, symbolFlags, symbolExcludes);
}
function hasExportDeclarations(node) {
var body = node.kind === 265 ? node : node.body;
if (body && (body.kind === 265 || body.kind === 234)) {
for (var _i = 0, _a = body.statements; _i < _a.length; _i++) {
var stat = _a[_i];
if (stat.kind === 244 || stat.kind === 243) {
return true;
}
}
}
return false;
}
function setExportContextFlag(node) {
if (ts.isInAmbientContext(node) && !hasExportDeclarations(node)) {
node.flags |= 32;
}
else {
node.flags &= ~32;
}
}
function bindModuleDeclaration(node) {
setExportContextFlag(node);
if (ts.isAmbientModule(node)) {
if (ts.hasModifier(node, 1)) {
errorOnFirstToken(node, ts.Diagnostics.export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always_visible);
}
if (ts.isExternalModuleAugmentation(node)) {
declareModuleSymbol(node);
}
else {
var pattern = void 0;
if (node.name.kind === 9) {
var text = node.name.text;
if (ts.hasZeroOrOneAsteriskCharacter(text)) {
pattern = ts.tryParsePattern(text);
}
else {
errorOnFirstToken(node.name, ts.Diagnostics.Pattern_0_can_have_at_most_one_Asterisk_character, text);
}
}
var symbol = declareSymbolAndAddToSymbolTable(node, 512, 106639);
if (pattern) {
(file.patternAmbientModules || (file.patternAmbientModules = [])).push({ pattern: pattern, symbol: symbol });
}
}
}
else {
var state = declareModuleSymbol(node);
if (state !== 0) {
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 declareModuleSymbol(node) {
var state = getModuleInstanceState(node);
var instantiated = state !== 0;
declareSymbolAndAddToSymbolTable(node, instantiated ? 512 : 1024, instantiated ? 106639 : 0);
return state;
}
function bindFunctionOrConstructorType(node) {
var symbol = createSymbol(131072, getDeclarationName(node));
addDeclarationToSymbol(symbol, node, 131072);
var typeLiteralSymbol = createSymbol(2048, "__type");
addDeclarationToSymbol(typeLiteralSymbol, node, 2048);
typeLiteralSymbol.members = ts.createSymbolTable();
typeLiteralSymbol.members.set(symbol.escapedName, symbol);
}
function bindObjectLiteralExpression(node) {
if (inStrictMode) {
var seen = ts.createUnderscoreEscapedMap();
for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
var prop = _a[_i];
if (prop.kind === 263 || prop.name.kind !== 71) {
continue;
}
var identifier = prop.name;
var currentKind = prop.kind === 261 || prop.kind === 262 || prop.kind === 151
? 1
: 2;
var existingKind = seen.get(identifier.escapedText);
if (!existingKind) {
seen.set(identifier.escapedText, currentKind);
continue;
}
if (currentKind === 1 && existingKind === 1) {
var span_1 = ts.getErrorSpanForNode(file, identifier);
file.bindDiagnostics.push(ts.createFileDiagnostic(file, span_1.start, span_1.length, ts.Diagnostics.An_object_literal_cannot_have_multiple_properties_with_the_same_name_in_strict_mode));
}
}
}
return bindAnonymousDeclaration(node, 4096, "__object");
}
function bindJsxAttributes(node) {
return bindAnonymousDeclaration(node, 4096, "__jsxAttributes");
}
function bindJsxAttribute(node, symbolFlags, symbolExcludes) {
return declareSymbolAndAddToSymbolTable(node, symbolFlags, symbolExcludes);
}
function bindAnonymousDeclaration(node, symbolFlags, name) {
var symbol = createSymbol(symbolFlags, name);
if (symbolFlags & 8) {
symbol.parent = container.symbol;
}
addDeclarationToSymbol(symbol, node, symbolFlags);
}
function bindBlockScopedDeclaration(node, symbolFlags, symbolExcludes) {
switch (blockScopeContainer.kind) {
case 233:
declareModuleMember(node, symbolFlags, symbolExcludes);
break;
case 265:
if (ts.isExternalModule(container)) {
declareModuleMember(node, symbolFlags, symbolExcludes);
break;
}
default:
if (!blockScopeContainer.locals) {
blockScopeContainer.locals = ts.createSymbolTable();
addToContainerChain(blockScopeContainer);
}
declareSymbol(blockScopeContainer.locals, undefined, node, symbolFlags, symbolExcludes);
}
}
function bindBlockScopedVariableDeclaration(node) {
bindBlockScopedDeclaration(node, 2, 107455);
}
function checkStrictModeIdentifier(node) {
if (inStrictMode &&
node.originalKeywordKind >= 108 &&
node.originalKeywordKind <= 116 &&
!ts.isIdentifierName(node) &&
!ts.isInAmbientContext(node)) {
if (!file.parseDiagnostics.length) {
file.bindDiagnostics.push(createDiagnosticForNode(node, getStrictModeIdentifierMessage(node), ts.declarationNameToString(node)));
}
}
}
function getStrictModeIdentifierMessage(node) {
if (ts.getContainingClass(node)) {
return ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode;
}
if (file.externalModuleIndicator) {
return ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode;
}
return ts.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode;
}
function checkStrictModeBinaryExpression(node) {
if (inStrictMode && ts.isLeftHandSideExpression(node.left) && ts.isAssignmentOperator(node.operatorToken.kind)) {
checkStrictModeEvalOrArguments(node, node.left);
}
}
function checkStrictModeCatchClause(node) {
if (inStrictMode && node.variableDeclaration) {
checkStrictModeEvalOrArguments(node, node.variableDeclaration.name);
}
}
function checkStrictModeDeleteExpression(node) {
if (inStrictMode && node.expression.kind === 71) {
var span_2 = ts.getErrorSpanForNode(file, node.expression);
file.bindDiagnostics.push(ts.createFileDiagnostic(file, span_2.start, span_2.length, ts.Diagnostics.delete_cannot_be_called_on_an_identifier_in_strict_mode));
}
}
function isEvalOrArgumentsIdentifier(node) {
return ts.isIdentifier(node) && (node.escapedText === "eval" || node.escapedText === "arguments");
}
function checkStrictModeEvalOrArguments(contextNode, name) {
if (name && name.kind === 71) {
var identifier = name;
if (isEvalOrArgumentsIdentifier(identifier)) {
var span_3 = ts.getErrorSpanForNode(file, name);
file.bindDiagnostics.push(ts.createFileDiagnostic(file, span_3.start, span_3.length, getStrictModeEvalOrArgumentsMessage(contextNode), ts.idText(identifier)));
}
}
}
function getStrictModeEvalOrArgumentsMessage(node) {
if (ts.getContainingClass(node)) {
return ts.Diagnostics.Invalid_use_of_0_Class_definitions_are_automatically_in_strict_mode;
}
if (file.externalModuleIndicator) {
return ts.Diagnostics.Invalid_use_of_0_Modules_are_automatically_in_strict_mode;
}
return ts.Diagnostics.Invalid_use_of_0_in_strict_mode;
}
function checkStrictModeFunctionName(node) {
if (inStrictMode) {
checkStrictModeEvalOrArguments(node, node.name);
}
}
function getStrictModeBlockScopeFunctionDeclarationMessage(node) {
if (ts.getContainingClass(node)) {
return ts.Diagnostics.Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_definitions_are_automatically_in_strict_mode;
}
if (file.externalModuleIndicator) {
return ts.Diagnostics.Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_are_automatically_in_strict_mode;
}
return ts.Diagnostics.Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5;
}
function checkStrictModeFunctionDeclaration(node) {
if (languageVersion < 2) {
if (blockScopeContainer.kind !== 265 &&
blockScopeContainer.kind !== 233 &&
!ts.isFunctionLike(blockScopeContainer)) {
var errorSpan = ts.getErrorSpanForNode(file, node);
file.bindDiagnostics.push(ts.createFileDiagnostic(file, errorSpan.start, errorSpan.length, getStrictModeBlockScopeFunctionDeclarationMessage(node)));
}
}
}
function checkStrictModeNumericLiteral(node) {
if (inStrictMode && node.numericLiteralFlags & 4) {
file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Octal_literals_are_not_allowed_in_strict_mode));
}
}
function checkStrictModePostfixUnaryExpression(node) {
if (inStrictMode) {
checkStrictModeEvalOrArguments(node, node.operand);
}
}
function checkStrictModePrefixUnaryExpression(node) {
if (inStrictMode) {
if (node.operator === 43 || node.operator === 44) {
checkStrictModeEvalOrArguments(node, node.operand);
}
}
}
function checkStrictModeWithStatement(node) {
if (inStrictMode) {
errorOnFirstToken(node, ts.Diagnostics.with_statements_are_not_allowed_in_strict_mode);
}
}
function errorOnFirstToken(node, message, arg0, arg1, arg2) {
var span = ts.getSpanOfTokenAtPosition(file, node.pos);
file.bindDiagnostics.push(ts.createFileDiagnostic(file, span.start, span.length, message, arg0, arg1, arg2));
}
function bind(node) {
if (!node) {
return;
}
node.parent = parent;
var saveInStrictMode = inStrictMode;
if (ts.isInJavaScriptFile(node))
bindJSDocTypedefTagIfAny(node);
bindWorker(node);
if (node.kind > 142) {
var saveParent = parent;
parent = node;
var containerFlags = getContainerFlags(node);
if (containerFlags === 0) {
bindChildren(node);
}
else {
bindContainer(node, containerFlags);
}
parent = saveParent;
}
else if (!skipTransformFlagAggregation && (node.transformFlags & 536870912) === 0) {
subtreeTransformFlags |= computeTransformFlagsForNode(node, 0);
}
inStrictMode = saveInStrictMode;
}
function bindJSDocTypedefTagIfAny(node) {
if (!ts.hasJSDocNodes(node)) {
return;
}
for (var _i = 0, _a = node.jsDoc; _i < _a.length; _i++) {
var jsDoc = _a[_i];
if (!jsDoc.tags) {
continue;
}
for (var _b = 0, _c = jsDoc.tags; _b < _c.length; _b++) {
var tag = _c[_b];
if (tag.kind === 283) {
var savedParent = parent;
parent = jsDoc;
bind(tag);
parent = savedParent;
}
}
}
}
function updateStrictModeStatementList(statements) {
if (!inStrictMode) {
for (var _i = 0, statements_1 = statements; _i < statements_1.length; _i++) {
var statement = statements_1[_i];
if (!ts.isPrologueDirective(statement)) {
return;
}
if (isUseStrictPrologueDirective(statement)) {
inStrictMode = true;
return;
}
}
}
}
function isUseStrictPrologueDirective(node) {
var nodeText = ts.getTextOfNodeFromSourceText(file.text, node.expression);
return nodeText === '"use strict"' || nodeText === "'use strict'";
}
function bindWorker(node) {
switch (node.kind) {
case 71:
if (node.isInJSDocNamespace) {
var parentNode = node.parent;
while (parentNode && parentNode.kind !== 283) {
parentNode = parentNode.parent;
}
bindBlockScopedDeclaration(parentNode, 524288, 793064);
break;
}
case 99:
if (currentFlow && (ts.isExpression(node) || parent.kind === 262)) {
node.flowNode = currentFlow;
}
return checkStrictModeIdentifier(node);
case 179:
if (currentFlow && isNarrowableReference(node)) {
node.flowNode = currentFlow;
}
break;
case 194:
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 5:
bindStaticPropertyAssignment(node);
break;
case 0:
break;
default:
ts.Debug.fail("Unknown special property assignment kind");
}
return checkStrictModeBinaryExpression(node);
case 260:
return checkStrictModeCatchClause(node);
case 188:
return checkStrictModeDeleteExpression(node);
case 8:
return checkStrictModeNumericLiteral(node);
case 193:
return checkStrictModePostfixUnaryExpression(node);
case 192:
return checkStrictModePrefixUnaryExpression(node);
case 220:
return checkStrictModeWithStatement(node);
case 169:
seenThisKeyword = true;
return;
case 158:
return checkTypePredicate(node);
case 145:
return declareSymbolAndAddToSymbolTable(node, 262144, 530920);
case 146:
return bindParameter(node);
case 226:
return bindVariableDeclarationOrBindingElement(node);
case 176:
node.flowNode = currentFlow;
return bindVariableDeclarationOrBindingElement(node);
case 149:
case 148:
return bindPropertyWorker(node);
case 261:
case 262:
return bindPropertyOrMethodOrAccessor(node, 4, 0);
case 264:
return bindPropertyOrMethodOrAccessor(node, 8, 900095);
case 155:
case 156:
case 157:
return declareSymbolAndAddToSymbolTable(node, 131072, 0);
case 151:
case 150:
return bindPropertyOrMethodOrAccessor(node, 8192 | (node.questionToken ? 16777216 : 0), ts.isObjectLiteralMethod(node) ? 0 : 99263);
case 228:
return bindFunctionDeclaration(node);
case 152:
return declareSymbolAndAddToSymbolTable(node, 16384, 0);
case 153:
return bindPropertyOrMethodOrAccessor(node, 32768, 41919);
case 154:
return bindPropertyOrMethodOrAccessor(node, 65536, 74687);
case 160:
case 273:
case 161:
return bindFunctionOrConstructorType(node);
case 163:
case 285:
case 172:
return bindAnonymousTypeWorker(node);
case 178:
return bindObjectLiteralExpression(node);
case 186:
case 187:
return bindFunctionExpression(node);
case 181:
if (ts.isInJavaScriptFile(node)) {
bindCallExpression(node);
}
break;
case 199:
case 229:
inStrictMode = true;
return bindClassLikeDeclaration(node);
case 230:
return bindBlockScopedDeclaration(node, 64, 792968);
case 231:
return bindBlockScopedDeclaration(node, 524288, 793064);
case 232:
return bindEnumDeclaration(node);
case 233:
return bindModuleDeclaration(node);
case 254:
return bindJsxAttributes(node);
case 253:
return bindJsxAttribute(node, 4, 0);
case 237:
case 240:
case 242:
case 246:
return declareSymbolAndAddToSymbolTable(node, 2097152, 2097152);
case 236:
return bindNamespaceExportDeclaration(node);
case 239:
return bindImportClause(node);
case 244:
return bindExportDeclaration(node);
case 243:
return bindExportAssignment(node);
case 265:
updateStrictModeStatementList(node.statements);
return bindSourceFileIfExternalModule();
case 207:
if (!ts.isFunctionLike(node.parent)) {
return;
}
case 234:
return updateStrictModeStatementList(node.statements);
case 279:
if (node.parent.kind !== 285) {
break;
}
case 284:
var propTag = node;
var flags = propTag.isBracketed || propTag.typeExpression && propTag.typeExpression.type.kind === 272 ?
4 | 16777216 :
4;
return declareSymbolAndAddToSymbolTable(propTag, flags, 0);
case 283: {
var fullName = node.fullName;
if (!fullName || fullName.kind === 71) {
return bindBlockScopedDeclaration(node, 524288, 793064);
}
break;
}
}
}
function bindPropertyWorker(node) {
return bindPropertyOrMethodOrAccessor(node, 4 | (node.questionToken ? 16777216 : 0), 0);
}
function bindAnonymousTypeWorker(node) {
return bindAnonymousDeclaration(node, 2048, "__type");
}
function checkTypePredicate(node) {
var parameterName = node.parameterName, type = node.type;
if (parameterName && parameterName.kind === 71) {
checkStrictModeIdentifier(parameterName);
}
if (parameterName && parameterName.kind === 169) {
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) {
if (!container.symbol || !container.symbol.exports) {
bindAnonymousDeclaration(node, 2097152, getDeclarationName(node));
}
else {
var flags = node.kind === 243 && ts.exportAssignmentIsAlias(node)
? 2097152
: 4;
declareSymbol(container.symbol.exports, container.symbol, node, flags, 4 | 2097152 | 32 | 16);
}
}
function bindNamespaceExportDeclaration(node) {
if (node.modifiers && node.modifiers.length) {
file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Modifiers_cannot_appear_here));
}
if (node.parent.kind !== 265) {
file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Global_module_exports_may_only_appear_at_top_level));
return;
}
else {
var parent_1 = node.parent;
if (!ts.isExternalModule(parent_1)) {
file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Global_module_exports_may_only_appear_in_module_files));
return;
}
if (!parent_1.isDeclarationFile) {
file.bindDiagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.Global_module_exports_may_only_appear_in_declaration_files));
return;
}
}
file.symbol.globalExports = file.symbol.globalExports || ts.createSymbolTable();
declareSymbol(file.symbol.globalExports, file.symbol, node, 2097152, 2097152);
}
function bindExportDeclaration(node) {
if (!container.symbol || !container.symbol.exports) {
bindAnonymousDeclaration(node, 8388608, getDeclarationName(node));
}
else if (!node.exportClause) {
declareSymbol(container.symbol.exports, container.symbol, node, 8388608, 0);
}
}
function bindImportClause(node) {
if (node.name) {
declareSymbolAndAddToSymbolTable(node, 2097152, 2097152);
}
}
function setCommonJsModuleIndicator(node) {
if (!file.commonJsModuleIndicator) {
file.commonJsModuleIndicator = node;
if (!file.externalModuleIndicator) {
bindSourceFileAsExternalModule();
}
}
}
function bindExportsPropertyAssignment(node) {
setCommonJsModuleIndicator(node);
declareSymbol(file.symbol.exports, file.symbol, node.left, 4 | 1048576, 0);
}
function isExportsOrModuleExportsOrAlias(node) {
return ts.isExportsIdentifier(node) ||
ts.isModuleExportsPropertyAccessExpression(node) ||
ts.isIdentifier(node) && isNameOfExportsOrModuleExportsAliasDeclaration(node);
}
function isNameOfExportsOrModuleExportsAliasDeclaration(node) {
var symbol = lookupSymbolForName(node.escapedText);
return symbol && symbol.valueDeclaration && ts.isVariableDeclaration(symbol.valueDeclaration) &&
symbol.valueDeclaration.initializer && isExportsOrModuleExportsOrAliasOrAssignment(symbol.valueDeclaration.initializer);
}
function isExportsOrModuleExportsOrAliasOrAssignment(node) {
return isExportsOrModuleExportsOrAlias(node) ||
(ts.isAssignmentExpression(node, true) && (isExportsOrModuleExportsOrAliasOrAssignment(node.left) || isExportsOrModuleExportsOrAliasOrAssignment(node.right)));
}
function bindModuleExportsAssignment(node) {
var assignedExpression = ts.getRightMostAssignedExpression(node.right);
if (ts.isEmptyObjectLiteral(assignedExpression) || isExportsOrModuleExportsOrAlias(assignedExpression)) {
setCommonJsModuleIndicator(node);
return;
}
setCommonJsModuleIndicator(node);
declareSymbol(file.symbol.exports, file.symbol, node, 4 | 1048576 | 512, 0);
}
function bindThisPropertyAssignment(node) {
ts.Debug.assert(ts.isInJavaScriptFile(node));
var container = ts.getThisContainer(node, false);
switch (container.kind) {
case 228:
case 186:
container.symbol.members = container.symbol.members || ts.createSymbolTable();
declareSymbol(container.symbol.members, container.symbol, node, 4, 0 & ~4);
break;
case 152:
case 149:
case 151:
case 153:
case 154:
var containingClass = container.parent;
var symbolTable = ts.hasModifier(container, 32) ? containingClass.symbol.exports : containingClass.symbol.members;
declareSymbol(symbolTable, containingClass.symbol, node, 4, 0, true);
break;
}
}
function bindPrototypePropertyAssignment(node) {
var leftSideOfAssignment = node.left;
var classPrototype = leftSideOfAssignment.expression;
var constructorFunction = classPrototype.expression;
leftSideOfAssignment.parent = node;
constructorFunction.parent = classPrototype;
classPrototype.parent = leftSideOfAssignment;
bindPropertyAssignment(constructorFunction.escapedText, leftSideOfAssignment, true);
}
function bindStaticPropertyAssignment(node) {
var leftSideOfAssignment = node.left;
var target = leftSideOfAssignment.expression;
if (ts.isIdentifier(target)) {
leftSideOfAssignment.parent = node;
target.parent = leftSideOfAssignment;
if (isNameOfExportsOrModuleExportsAliasDeclaration(target)) {
bindExportsPropertyAssignment(node);
}
else {
bindPropertyAssignment(target.escapedText, leftSideOfAssignment, false);
}
}
}
function lookupSymbolForName(name) {
return (container.symbol && container.symbol.exports && container.symbol.exports.get(name)) || (container.locals && container.locals.get(name));
}
function bindPropertyAssignment(functionName, propertyAccessExpression, isPrototypeProperty) {
var targetSymbol = lookupSymbolForName(functionName);
if (targetSymbol && ts.isDeclarationOfFunctionOrClassExpression(targetSymbol)) {
targetSymbol = targetSymbol.valueDeclaration.initializer.symbol;
}
if (!targetSymbol || !(targetSymbol.flags & (16 | 32))) {
return;
}
var symbolTable = isPrototypeProperty ?
(targetSymbol.members || (targetSymbol.members = ts.createSymbolTable())) :
(targetSymbol.exports || (targetSymbol.exports = ts.createSymbolTable()));
declareSymbol(symbolTable, targetSymbol, propertyAccessExpression, 4, 0);
}
function bindCallExpression(node) {
if (!file.commonJsModuleIndicator && ts.isRequireCall(node, false)) {
setCommonJsModuleIndicator(node);
}
}
function bindClassLikeDeclaration(node) {
if (node.kind === 229) {
bindBlockScopedDeclaration(node, 32, 899519);
}
else {
var bindingName = node.name ? node.name.escapedText : "__class";
bindAnonymousDeclaration(node, 32, bindingName);
if (node.name) {
classifiableNames.set(node.name.escapedText, true);
}
}
var symbol = node.symbol;
var prototypeSymbol = createSymbol(4 | 4194304, "prototype");
var symbolExport = symbol.exports.get(prototypeSymbol.escapedName);
if (symbolExport) {
if (node.name) {
node.name.parent = node;
}
file.bindDiagnostics.push(createDiagnosticForNode(symbolExport.declarations[0], ts.Diagnostics.Duplicate_identifier_0, ts.symbolName(prototypeSymbol)));
}
symbol.exports.set(prototypeSymbol.escapedName, prototypeSymbol);
prototypeSymbol.parent = symbol;
}
function bindEnumDeclaration(node) {
return ts.isConst(node)
? bindBlockScopedDeclaration(node, 128, 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 (inStrictMode && !ts.isInAmbientContext(node)) {
checkStrictModeEvalOrArguments(node, node.name);
}
if (ts.isBindingPattern(node.name)) {
bindAnonymousDeclaration(node, 1, "__" + ts.indexOf(node.parent.parameters, node));
}
else {
declareSymbolAndAddToSymbolTable(node, 1, 107455);
}
if (ts.isParameterPropertyDeclaration(node)) {
var classDeclaration = node.parent.parent;
declareSymbol(classDeclaration.symbol.members, classDeclaration.symbol, node, 4 | (node.questionToken ? 16777216 : 0), 0);
}
}
function bindFunctionDeclaration(node) {
if (!file.isDeclarationFile && !ts.isInAmbientContext(node)) {
if (ts.isAsyncFunction(node)) {
emitFlags |= 1024;
}
}
checkStrictModeFunctionName(node);
if (inStrictMode) {
checkStrictModeFunctionDeclaration(node);
bindBlockScopedDeclaration(node, 16, 106927);
}
else {
declareSymbolAndAddToSymbolTable(node, 16, 106927);
}
}
function bindFunctionExpression(node) {
if (!file.isDeclarationFile && !ts.isInAmbientContext(node)) {
if (ts.isAsyncFunction(node)) {
emitFlags |= 1024;
}
}
if (currentFlow) {
node.flowNode = currentFlow;
}
checkStrictModeFunctionName(node);
var bindingName = node.name ? node.name.escapedText : "__function";
return bindAnonymousDeclaration(node, 16, bindingName);
}
function bindPropertyOrMethodOrAccessor(node, symbolFlags, symbolExcludes) {
if (!file.isDeclarationFile && !ts.isInAmbientContext(node) && ts.isAsyncFunction(node)) {
emitFlags |= 1024;
}
if (currentFlow && ts.isObjectLiteralOrClassExpressionMethod(node)) {
node.flowNode = currentFlow;
}
return ts.hasDynamicName(node)
? bindAnonymousDeclaration(node, symbolFlags, "__computed")
: declareSymbolAndAddToSymbolTable(node, symbolFlags, symbolExcludes);
}
function shouldReportErrorOnModuleDeclaration(node) {
var instanceState = getModuleInstanceState(node);
return instanceState === 1 || (instanceState === 2 && options.preserveConstEnums);
}
function checkUnreachable(node) {
if (!(currentFlow.flags & 1)) {
return false;
}
if (currentFlow === unreachableFlow) {
var reportError = (ts.isStatementButNotDeclaration(node) && node.kind !== 209) ||
node.kind === 229 ||
(node.kind === 233 && shouldReportErrorOnModuleDeclaration(node)) ||
(node.kind === 232 && (!ts.isConstEnumDeclaration(node) || options.preserveConstEnums));
if (reportError) {
currentFlow = reportedUnreachableFlow;
var reportUnreachableCode = !options.allowUnreachableCode &&
!ts.isInAmbientContext(node) &&
(node.kind !== 208 ||
ts.getCombinedNodeFlags(node.declarationList) & 3 ||
ts.forEach(node.declarationList.declarations, function (d) { return d.initializer; }));
if (reportUnreachableCode) {
errorOnFirstToken(node, ts.Diagnostics.Unreachable_code_detected);
}
}
}
return true;
}
}
function computeTransformFlagsForNode(node, subtreeFlags) {
var kind = node.kind;
switch (kind) {
case 181:
return computeCallExpression(node, subtreeFlags);
case 182:
return computeNewExpression(node, subtreeFlags);
case 233:
return computeModuleDeclaration(node, subtreeFlags);
case 185:
return computeParenthesizedExpression(node, subtreeFlags);
case 194:
return computeBinaryExpression(node, subtreeFlags);
case 210:
return computeExpressionStatement(node, subtreeFlags);
case 146:
return computeParameter(node, subtreeFlags);
case 187:
return computeArrowFunction(node, subtreeFlags);
case 186:
return computeFunctionExpression(node, subtreeFlags);
case 228:
return computeFunctionDeclaration(node, subtreeFlags);
case 226:
return computeVariableDeclaration(node, subtreeFlags);
case 227:
return computeVariableDeclarationList(node, subtreeFlags);
case 208:
return computeVariableStatement(node, subtreeFlags);
case 222:
return computeLabeledStatement(node, subtreeFlags);
case 229:
return computeClassDeclaration(node, subtreeFlags);
case 199:
return computeClassExpression(node, subtreeFlags);
case 259:
return computeHeritageClause(node, subtreeFlags);
case 260:
return computeCatchClause(node, subtreeFlags);
case 201:
return computeExpressionWithTypeArguments(node, subtreeFlags);
case 152:
return computeConstructor(node, subtreeFlags);
case 149:
return computePropertyDeclaration(node, subtreeFlags);
case 151:
return computeMethod(node, subtreeFlags);
case 153:
case 154:
return computeAccessor(node, subtreeFlags);
case 237:
return computeImportEquals(node, subtreeFlags);
case 179:
return computePropertyAccess(node, subtreeFlags);
default:
return computeOther(node, kind, subtreeFlags);
}
}
ts.computeTransformFlagsForNode = computeTransformFlagsForNode;
function computeCallExpression(node, subtreeFlags) {
var transformFlags = subtreeFlags;
var expression = node.expression;
var expressionKind = expression.kind;
if (node.typeArguments) {
transformFlags |= 3;
}
if (subtreeFlags & 524288
|| isSuperOrSuperProperty(expression, expressionKind)) {
transformFlags |= 192;
}
if (expression.kind === 91) {
transformFlags |= 67108864;
if (subtreeFlags & 16384) {
transformFlags |= 32768;
}
}
node.transformFlags = transformFlags | 536870912;
return transformFlags & ~537396545;
}
function isSuperOrSuperProperty(node, kind) {
switch (kind) {
case 97:
return true;
case 179:
case 180:
var expression = node.expression;
var expressionKind = expression.kind;
return expressionKind === 97;
}
return false;
}
function computeNewExpression(node, subtreeFlags) {
var transformFlags = subtreeFlags;
if (node.typeArguments) {
transformFlags |= 3;
}
if (subtreeFlags & 524288) {
transformFlags |= 192;
}
node.transformFlags = transformFlags | 536870912;
return transformFlags & ~537396545;
}
function computeBinaryExpression(node, subtreeFlags) {
var transformFlags = subtreeFlags;
var operatorTokenKind = node.operatorToken.kind;
var leftKind = node.left.kind;
if (operatorTokenKind === 58 && leftKind === 178) {
transformFlags |= 8 | 192 | 3072;
}
else if (operatorTokenKind === 58 && leftKind === 177) {
transformFlags |= 192 | 3072;
}
else if (operatorTokenKind === 40
|| operatorTokenKind === 62) {
transformFlags |= 32;
}
node.transformFlags = transformFlags | 536870912;
return transformFlags & ~536872257;
}
function computeParameter(node, subtreeFlags) {
var transformFlags = subtreeFlags;
var name = node.name;
var initializer = node.initializer;
var dotDotDotToken = node.dotDotDotToken;
if (node.questionToken
|| node.type
|| subtreeFlags & 4096
|| ts.isThisIdentifier(name)) {
transformFlags |= 3;
}
if (ts.hasModifier(node, 92)) {
transformFlags |= 3 | 262144;
}
if (subtreeFlags & 1048576) {
transformFlags |= 8;
}
if (subtreeFlags & 8388608 || initializer || dotDotDotToken) {
transformFlags |= 192 | 131072;
}
node.transformFlags = transformFlags | 536870912;
return transformFlags & ~536872257;
}
function computeParenthesizedExpression(node, subtreeFlags) {
var transformFlags = subtreeFlags;
var expression = node.expression;
var expressionKind = expression.kind;
var expressionTransformFlags = expression.transformFlags;
if (expressionKind === 202
|| expressionKind === 184) {
transformFlags |= 3;
}
if (expressionTransformFlags & 1024) {
transformFlags |= 1024;
}
node.transformFlags = transformFlags | 536870912;
return transformFlags & ~536872257;
}
function computeClassDeclaration(node, subtreeFlags) {
var transformFlags;
if (ts.hasModifier(node, 2)) {
transformFlags = 3;
}
else {
transformFlags = subtreeFlags | 192;
if ((subtreeFlags & 274432)
|| node.typeParameters) {
transformFlags |= 3;
}
if (subtreeFlags & 65536) {
transformFlags |= 16384;
}
}
node.transformFlags = transformFlags | 536870912;
return transformFlags & ~539358529;
}
function computeClassExpression(node, subtreeFlags) {
var transformFlags = subtreeFlags | 192;
if (subtreeFlags & 274432
|| node.typeParameters) {
transformFlags |= 3;
}
if (subtreeFlags & 65536) {
transformFlags |= 16384;
}
node.transformFlags = transformFlags | 536870912;
return transformFlags & ~539358529;
}
function computeHeritageClause(node, subtreeFlags) {
var transformFlags = subtreeFlags;
switch (node.token) {
case 85:
transformFlags |= 192;
break;
case 108:
transformFlags |= 3;
break;
default:
ts.Debug.fail("Unexpected token for heritage clause");
break;
}
node.transformFlags = transformFlags | 536870912;
return transformFlags & ~536872257;
}
function computeCatchClause(node, subtreeFlags) {
var transformFlags = subtreeFlags;
if (!node.variableDeclaration) {
transformFlags |= 8;
}
else if (ts.isBindingPattern(node.variableDeclaration.name)) {
transformFlags |= 192;
}
node.transformFlags = transformFlags | 536870912;
return transformFlags & ~537920833;
}
function computeExpressionWithTypeArguments(node, subtreeFlags) {
var transformFlags = subtreeFlags | 192;
if (node.typeArguments) {
transformFlags |= 3;
}
node.transformFlags = transformFlags | 536870912;
return transformFlags & ~536872257;
}
function computeConstructor(node, subtreeFlags) {
var transformFlags = subtreeFlags;
if (ts.hasModifier(node, 2270)
|| !node.body) {
transformFlags |= 3;
}
if (subtreeFlags & 1048576) {
transformFlags |= 8;
}
node.transformFlags = transformFlags | 536870912;
return transformFlags & ~601015617;
}
function computeMethod(node, subtreeFlags) {
var transformFlags = subtreeFlags | 192;
if (node.decorators
|| ts.hasModifier(node, 2270)
|| node.typeParameters
|| node.type
|| !node.body) {
transformFlags |= 3;
}
if (subtreeFlags & 1048576) {
transformFlags |= 8;
}
if (ts.hasModifier(node, 256)) {
transformFlags |= node.asteriskToken ? 8 : 16;
}
if (node.asteriskToken) {
transformFlags |= 768;
}
node.transformFlags = transformFlags | 536870912;
return transformFlags & ~601015617;
}
function computeAccessor(node, subtreeFlags) {
var transformFlags = subtreeFlags;
if (node.decorators
|| ts.hasModifier(node, 2270)
|| node.type
|| !node.body) {
transformFlags |= 3;
}
if (subtreeFlags & 1048576) {
transformFlags |= 8;
}
node.transformFlags = transformFlags | 536870912;
return transformFlags & ~601015617;
}
function computePropertyDeclaration(node, subtreeFlags) {
var transformFlags = subtreeFlags | 3;
if (node.initializer) {
transformFlags |= 8192;
}
node.transformFlags = transformFlags | 536870912;
return transformFlags & ~536872257;
}
function computeFunctionDeclaration(node, subtreeFlags) {
var transformFlags;
var modifierFlags = ts.getModifierFlags(node);
var body = node.body;
if (!body || (modifierFlags & 2)) {
transformFlags = 3;
}
else {
transformFlags = subtreeFlags | 33554432;
if (modifierFlags & 2270
|| node.typeParameters
|| node.type) {
transformFlags |= 3;
}
if (modifierFlags & 256) {
transformFlags |= node.asteriskToken ? 8 : 16;
}
if (subtreeFlags & 1048576) {
transformFlags |= 8;
}
if (subtreeFlags & 163840) {
transformFlags |= 192;
}
if (node.asteriskToken) {
transformFlags |= 768;
}
}
node.transformFlags = transformFlags | 536870912;
return transformFlags & ~601281857;
}
function computeFunctionExpression(node, subtreeFlags) {
var transformFlags = subtreeFlags;
if (ts.hasModifier(node, 2270)
|| node.typeParameters
|| node.type) {
transformFlags |= 3;
}
if (ts.hasModifier(node, 256)) {
transformFlags |= node.asteriskToken ? 8 : 16;
}
if (subtreeFlags & 1048576) {
transformFlags |= 8;
}
if (subtreeFlags & 163840) {
transformFlags |= 192;
}
if (node.asteriskToken) {
transformFlags |= 768;
}
node.transformFlags = transformFlags | 536870912;
return transformFlags & ~601281857;
}
function computeArrowFunction(node, subtreeFlags) {
var transformFlags = subtreeFlags | 192;
if (ts.hasModifier(node, 2270)
|| node.typeParameters
|| node.type) {
transformFlags |= 3;
}
if (ts.hasModifier(node, 256)) {
transformFlags |= 16;
}
if (subtreeFlags & 1048576) {
transformFlags |= 8;
}
if (subtreeFlags & 16384) {
transformFlags |= 32768;
}
node.transformFlags = transformFlags | 536870912;
return transformFlags & ~601249089;
}
function computePropertyAccess(node, subtreeFlags) {
var transformFlags = subtreeFlags;
var expression = node.expression;
var expressionKind = expression.kind;
if (expressionKind === 97) {
transformFlags |= 16384;
}
node.transformFlags = transformFlags | 536870912;
return transformFlags & ~536872257;
}
function computeVariableDeclaration(node, subtreeFlags) {
var transformFlags = subtreeFlags;
transformFlags |= 192 | 8388608;
if (subtreeFlags & 1048576) {
transformFlags |= 8;
}
if (node.type) {
transformFlags |= 3;
}
node.transformFlags = transformFlags | 536870912;
return transformFlags & ~536872257;
}
function computeVariableStatement(node, subtreeFlags) {
var transformFlags;
var declarationListTransformFlags = node.declarationList.transformFlags;
if (ts.hasModifier(node, 2)) {
transformFlags = 3;
}
else {
transformFlags = subtreeFlags;
if (declarationListTransformFlags & 8388608) {
transformFlags |= 192;
}
}
node.transformFlags = transformFlags | 536870912;
return transformFlags & ~536872257;
}
function computeLabeledStatement(node, subtreeFlags) {
var transformFlags = subtreeFlags;
if (subtreeFlags & 4194304
&& ts.isIterationStatement(node, true)) {
transformFlags |= 192;
}
node.transformFlags = transformFlags | 536870912;
return transformFlags & ~536872257;
}
function computeImportEquals(node, subtreeFlags) {
var transformFlags = subtreeFlags;
if (!ts.isExternalModuleImportEqualsDeclaration(node)) {
transformFlags |= 3;
}
node.transformFlags = transformFlags | 536870912;
return transformFlags & ~536872257;
}
function computeExpressionStatement(node, subtreeFlags) {
var transformFlags = subtreeFlags;
if (node.expression.transformFlags & 1024) {
transformFlags |= 192;
}
node.transformFlags = transformFlags | 536870912;
return transformFlags & ~536872257;
}
function computeModuleDeclaration(node, subtreeFlags) {
var transformFlags = 3;
var modifierFlags = ts.getModifierFlags(node);
if ((modifierFlags & 2) === 0) {
transformFlags |= subtreeFlags;
}
node.transformFlags = transformFlags | 536870912;
return transformFlags & ~574674241;
}
function computeVariableDeclarationList(node, subtreeFlags) {
var transformFlags = subtreeFlags | 33554432;
if (subtreeFlags & 8388608) {
transformFlags |= 192;
}
if (node.flags & 3) {
transformFlags |= 192 | 4194304;
}
node.transformFlags = transformFlags | 536870912;
return transformFlags & ~546309441;
}
function computeOther(node, kind, subtreeFlags) {
var transformFlags = subtreeFlags;
var excludeFlags = 536872257;
switch (kind) {
case 120:
case 191:
transformFlags |= 8 | 16;
break;
case 114:
case 112:
case 113:
case 117:
case 124:
case 76:
case 232:
case 264:
case 184:
case 202:
case 203:
case 131:
transformFlags |= 3;
break;
case 249:
case 250:
case 251:
case 10:
case 252:
case 253:
case 254:
case 255:
case 256:
transformFlags |= 4;
break;
case 13:
case 14:
case 15:
case 16:
case 196:
case 183:
case 262:
case 115:
case 204:
transformFlags |= 192;
break;
case 9:
if (node.hasExtendedUnicodeEscape) {
transformFlags |= 192;
}
break;
case 8:
if (node.numericLiteralFlags & 48) {
transformFlags |= 192;
}
break;
case 216:
if (node.awaitModifier) {
transformFlags |= 8;
}
transformFlags |= 192;
break;
case 197:
transformFlags |= 8 | 192 | 16777216;
break;
case 119:
case 133:
case 130:
case 134:
case 136:
case 122:
case 137:
case 105:
case 145:
case 148:
case 150:
case 155:
case 156:
case 157:
case 158:
case 159:
case 160:
case 161:
case 162:
case 163:
case 164:
case 165:
case 166:
case 167:
case 168:
case 230:
case 231:
case 169:
case 170:
case 171:
case 172:
case 173:
case 236:
transformFlags = 3;
excludeFlags = -3;
break;
case 144:
transformFlags |= 2097152;
if (subtreeFlags & 16384) {
transformFlags |= 65536;
}
break;
case 198:
transformFlags |= 192 | 524288;
break;
case 263:
transformFlags |= 8 | 1048576;
break;
case 97:
transformFlags |= 192;
break;
case 99:
transformFlags |= 16384;
break;
case 174:
transformFlags |= 192 | 8388608;
if (subtreeFlags & 524288) {
transformFlags |= 8 | 1048576;
}
excludeFlags = 537396545;
break;
case 175:
transformFlags |= 192 | 8388608;
excludeFlags = 537396545;
break;
case 176:
transformFlags |= 192;
if (node.dotDotDotToken) {
transformFlags |= 524288;
}
break;
case 147:
transformFlags |= 3 | 4096;
break;
case 178:
excludeFlags = 540087617;
if (subtreeFlags & 2097152) {
transformFlags |= 192;
}
if (subtreeFlags & 65536) {
transformFlags |= 16384;
}
if (subtreeFlags & 1048576) {
transformFlags |= 8;
}
break;
case 177:
case 182:
excludeFlags = 537396545;
if (subtreeFlags & 524288) {
transformFlags |= 192;
}
break;
case 212:
case 213:
case 214:
case 215:
if (subtreeFlags & 4194304) {
transformFlags |= 192;
}
break;
case 265:
if (subtreeFlags & 32768) {
transformFlags |= 192;
}
break;
case 219:
case 217:
case 218:
transformFlags |= 33554432;
break;
}
node.transformFlags = transformFlags | 536870912;
return transformFlags & ~excludeFlags;
}
function getTransformFlagsSubtreeExclusions(kind) {
if (kind >= 158 && kind <= 173) {
return -3;
}
switch (kind) {
case 181:
case 182:
case 177:
return 537396545;
case 233:
return 574674241;
case 146:
return 536872257;
case 187:
return 601249089;
case 186:
case 228:
return 601281857;
case 227:
return 546309441;
case 229:
case 199:
return 539358529;
case 152:
return 601015617;
case 151:
case 153:
case 154:
return 601015617;
case 119:
case 133:
case 130:
case 136:
case 134:
case 122:
case 137:
case 105:
case 145:
case 148:
case 150:
case 155:
case 156:
case 157:
case 230:
case 231:
return -3;
case 178:
return 540087617;
case 260:
return 537920833;
case 174:
case 175:
return 537396545;
default:
return 536872257;
}
}
ts.getTransformFlagsSubtreeExclusions = getTransformFlagsSubtreeExclusions;
function setParentPointers(parent, child) {
child.parent = parent;
ts.forEachChild(child, function (childsChild) { return setParentPointers(child, childsChild); });
}
})(ts || (ts = {}));
var ts;
(function (ts) {
function createGetSymbolWalker(getRestTypeOfSignature, getReturnTypeOfSignature, getBaseTypes, resolveStructuredTypeMembers, getTypeOfSymbol, getResolvedSymbol, getIndexTypeOfStructuredType, getConstraintFromTypeParameter, getFirstIdentifier) {
return getSymbolWalker;
function getSymbolWalker(accept) {
if (accept === void 0) { accept = function () { return true; }; }
var visitedTypes = [];
var visitedSymbols = [];
return {
walkType: function (type) {
try {
visitType(type);
return { visitedTypes: ts.getOwnValues(visitedTypes), visitedSymbols: ts.getOwnValues(visitedSymbols) };
}
finally {
ts.clear(visitedTypes);
ts.clear(visitedSymbols);
}
},
walkSymbol: function (symbol) {
try {
visitSymbol(symbol);
return { visitedTypes: ts.getOwnValues(visitedTypes), visitedSymbols: ts.getOwnValues(visitedSymbols) };
}
finally {
ts.clear(visitedTypes);
ts.clear(visitedSymbols);
}
},
};
function visitType(type) {
if (!type) {
return;
}
if (visitedTypes[type.id]) {
return;
}
visitedTypes[type.id] = type;
var shouldBail = visitSymbol(type.symbol);
if (shouldBail)
return;
if (type.flags & 32768) {
var objectType = type;
var objectFlags = objectType.objectFlags;
if (objectFlags & 4) {
visitTypeReference(type);
}
if (objectFlags & 32) {
visitMappedType(type);
}
if (objectFlags & (1 | 2)) {
visitInterfaceType(type);
}
if (objectFlags & (8 | 16)) {
visitObjectType(objectType);
}
}
if (type.flags & 16384) {
visitTypeParameter(type);
}
if (type.flags & 196608) {
visitUnionOrIntersectionType(type);
}
if (type.flags & 262144) {
visitIndexType(type);
}
if (type.flags & 524288) {
visitIndexedAccessType(type);
}
}
function visitTypeReference(type) {
visitType(type.target);
ts.forEach(type.typeArguments, visitType);
}
function visitTypeParameter(type) {
visitType(getConstraintFromTypeParameter(type));
}
function visitUnionOrIntersectionType(type) {
ts.forEach(type.types, visitType);
}
function visitIndexType(type) {
visitType(type.type);
}
function visitIndexedAccessType(type) {
visitType(type.objectType);
visitType(type.indexType);
visitType(type.constraint);
}
function visitMappedType(type) {
visitType(type.typeParameter);
visitType(type.constraintType);
visitType(type.templateType);
visitType(type.modifiersType);
}
function visitSignature(signature) {
if (signature.typePredicate) {
visitType(signature.typePredicate.type);
}
ts.forEach(signature.typeParameters, visitType);
for (var _i = 0, _a = signature.parameters; _i < _a.length; _i++) {
var parameter = _a[_i];
visitSymbol(parameter);
}
visitType(getRestTypeOfSignature(signature));
visitType(getReturnTypeOfSignature(signature));
}
function visitInterfaceType(interfaceT) {
visitObjectType(interfaceT);
ts.forEach(interfaceT.typeParameters, visitType);
ts.forEach(getBaseTypes(interfaceT), visitType);
visitType(interfaceT.thisType);
}
function visitObjectType(type) {
var stringIndexType = getIndexTypeOfStructuredType(type, 0);
visitType(stringIndexType);
var numberIndexType = getIndexTypeOfStructuredType(type, 1);
visitType(numberIndexType);
var resolved = resolveStructuredTypeMembers(type);
for (var _i = 0, _a = resolved.callSignatures; _i < _a.length; _i++) {
var signature = _a[_i];
visitSignature(signature);
}
for (var _b = 0, _c = resolved.constructSignatures; _b < _c.length; _b++) {
var signature = _c[_b];
visitSignature(signature);
}
for (var _d = 0, _e = resolved.properties; _d < _e.length; _d++) {
var p = _e[_d];
visitSymbol(p);
}
}
function visitSymbol(symbol) {
if (!symbol) {
return;
}
var symbolId = ts.getSymbolId(symbol);
if (visitedSymbols[symbolId]) {
return;
}
visitedSymbols[symbolId] = symbol;
if (!accept(symbol)) {
return true;
}
var t = getTypeOfSymbol(symbol);
visitType(t);
if (symbol.flags & 1952) {
symbol.exports.forEach(visitSymbol);
}
ts.forEach(symbol.declarations, function (d) {
if (d.type && d.type.kind === 162) {
var query = d.type;
var entity = getResolvedSymbol(getFirstIdentifier(query.exprName));
visitSymbol(entity);
}
});
}
}
}
ts.createGetSymbolWalker = createGetSymbolWalker;
})(ts || (ts = {}));
var ts;
(function (ts) {
function trace(host) {
host.trace(ts.formatMessage.apply(undefined, arguments));
}
ts.trace = trace;
function isTraceEnabled(compilerOptions, host) {
return compilerOptions.traceResolution && host.trace !== undefined;
}
ts.isTraceEnabled = isTraceEnabled;
function withPackageId(packageId, r) {
return r && { path: r.path, extension: r.ext, packageId: packageId };
}
function noPackageId(r) {
return withPackageId(undefined, r);
}
var Extensions;
(function (Extensions) {
Extensions[Extensions["TypeScript"] = 0] = "TypeScript";
Extensions[Extensions["JavaScript"] = 1] = "JavaScript";
Extensions[Extensions["DtsOnly"] = 2] = "DtsOnly";
})(Extensions || (Extensions = {}));
function resolvedTypeScriptOnly(resolved) {
if (!resolved) {
return undefined;
}
ts.Debug.assert(ts.extensionIsTypeScript(resolved.extension));
return { fileName: resolved.path, packageId: resolved.packageId };
}
function createResolvedModuleWithFailedLookupLocations(resolved, isExternalLibraryImport, failedLookupLocations) {
return {
resolvedModule: resolved && { resolvedFileName: resolved.path, extension: resolved.extension, isExternalLibraryImport: isExternalLibraryImport, packageId: resolved.packageId },
failedLookupLocations: failedLookupLocations
};
}
function tryReadPackageJsonFields(readTypes, jsonContent, baseDirectory, state) {
return readTypes ? tryReadFromField("typings") || tryReadFromField("types") : tryReadFromField("main");
function tryReadFromField(fieldName) {
if (!ts.hasProperty(jsonContent, fieldName)) {
if (state.traceEnabled) {
trace(state.host, ts.Diagnostics.package_json_does_not_have_a_0_field, fieldName);
}
return;
}
var fileName = jsonContent[fieldName];
if (!ts.isString(fileName)) {
if (state.traceEnabled) {
trace(state.host, ts.Diagnostics.Expected_type_of_0_field_in_package_json_to_be_string_got_1, fieldName, typeof fileName);
}
return;
}
var path = ts.normalizePath(ts.combinePaths(baseDirectory, fileName));
if (state.traceEnabled) {
trace(state.host, ts.Diagnostics.package_json_has_0_field_1_that_references_2, fieldName, fileName, path);
}
return path;
}
}
function readJson(path, host) {
try {
var jsonText = host.readFile(path);
return jsonText ? JSON.parse(jsonText) : {};
}
catch (e) {
return {};
}
}
function getEffectiveTypeRoots(options, host) {
if (options.typeRoots) {
return options.typeRoots;
}
var currentDirectory;
if (options.configFilePath) {
currentDirectory = ts.getDirectoryPath(options.configFilePath);
}
else if (host.getCurrentDirectory) {
currentDirectory = host.getCurrentDirectory();
}
if (currentDirectory !== undefined) {
return getDefaultTypeRoots(currentDirectory, host);
}
}
ts.getEffectiveTypeRoots = getEffectiveTypeRoots;
function getDefaultTypeRoots(currentDirectory, host) {
if (!host.directoryExists) {
return [ts.combinePaths(currentDirectory, nodeModulesAtTypes)];
}
var typeRoots;
ts.forEachAncestorDirectory(ts.normalizePath(currentDirectory), function (directory) {
var atTypes = ts.combinePaths(directory, nodeModulesAtTypes);
if (host.directoryExists(atTypes)) {
(typeRoots || (typeRoots = [])).push(atTypes);
}
return undefined;
});
return typeRoots;
}
var nodeModulesAtTypes = ts.combinePaths("node_modules", "@types");
function resolveTypeReferenceDirective(typeReferenceDirectiveName, containingFile, options, host) {
var traceEnabled = isTraceEnabled(options, host);
var moduleResolutionState = { compilerOptions: options, host: host, traceEnabled: traceEnabled };
var typeRoots = getEffectiveTypeRoots(options, host);
if (traceEnabled) {
if (containingFile === undefined) {
if (typeRoots === undefined) {
trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set, typeReferenceDirectiveName);
}
else {
trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1, typeReferenceDirectiveName, typeRoots);
}
}
else {
if (typeRoots === undefined) {
trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set, typeReferenceDirectiveName, containingFile);
}
else {
trace(host, ts.Diagnostics.Resolving_type_reference_directive_0_containing_file_1_root_directory_2, typeReferenceDirectiveName, containingFile, typeRoots);
}
}
}
var failedLookupLocations = [];
var resolved = primaryLookup();
var primary = true;
if (!resolved) {
resolved = secondaryLookup();
primary = false;
}
var resolvedTypeReferenceDirective;
if (resolved) {
if (!options.preserveSymlinks) {
resolved = __assign({}, resolved, { fileName: realPath(resolved.fileName, host, traceEnabled) });
}
if (traceEnabled) {
trace(host, ts.Diagnostics.Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2, typeReferenceDirectiveName, resolved.fileName, primary);
}
resolvedTypeReferenceDirective = { primary: primary, resolvedFileName: resolved.fileName, packageId: resolved.packageId };
}
return { resolvedTypeReferenceDirective: resolvedTypeReferenceDirective, failedLookupLocations: failedLookupLocations };
function primaryLookup() {
if (typeRoots && typeRoots.length) {
if (traceEnabled) {
trace(host, ts.Diagnostics.Resolving_with_primary_search_path_0, typeRoots.join(", "));
}
return ts.forEach(typeRoots, function (typeRoot) {
var candidate = ts.combinePaths(typeRoot, typeReferenceDirectiveName);
var candidateDirectory = ts.getDirectoryPath(candidate);
var directoryExists = directoryProbablyExists(candidateDirectory, host);
if (!directoryExists && traceEnabled) {
trace(host, ts.Diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it, candidateDirectory);
}
return resolvedTypeScriptOnly(loadNodeModuleFromDirectory(Extensions.DtsOnly, candidate, failedLookupLocations, !directoryExists, moduleResolutionState));
});
}
else {
if (traceEnabled) {
trace(host, ts.Diagnostics.Root_directory_cannot_be_determined_skipping_primary_search_paths);
}
}
}
function secondaryLookup() {
var resolvedFile;
var initialLocationForSecondaryLookup = containingFile && ts.getDirectoryPath(containingFile);
if (initialLocationForSecondaryLookup !== undefined) {
if (traceEnabled) {
trace(host, ts.Diagnostics.Looking_up_in_node_modules_folder_initial_location_0, initialLocationForSecondaryLookup);
}
var result = loadModuleFromNodeModules(Extensions.DtsOnly, typeReferenceDirectiveName, initialLocationForSecondaryLookup, failedLookupLocations, moduleResolutionState, undefined);
resolvedFile = resolvedTypeScriptOnly(result && result.value);
if (!resolvedFile && traceEnabled) {
trace(host, ts.Diagnostics.Type_reference_directive_0_was_not_resolved, typeReferenceDirectiveName);
}
return resolvedFile;
}
else {
if (traceEnabled) {
trace(host, ts.Diagnostics.Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_modules_folder);
}
}
}
}
ts.resolveTypeReferenceDirective = resolveTypeReferenceDirective;
function getAutomaticTypeDirectiveNames(options, host) {
if (options.types) {
return options.types;
}
var result = [];
if (host.directoryExists && host.getDirectories) {
var typeRoots = getEffectiveTypeRoots(options, host);
if (typeRoots) {
for (var _i = 0, typeRoots_1 = typeRoots; _i < typeRoots_1.length; _i++) {
var root = typeRoots_1[_i];
if (host.directoryExists(root)) {
for (var _a = 0, _b = host.getDirectories(root); _a < _b.length; _a++) {
var typeDirectivePath = _b[_a];
var normalized = ts.normalizePath(typeDirectivePath);
var packageJsonPath = pathToPackageJson(ts.combinePaths(root, normalized));
var isNotNeededPackage = host.fileExists(packageJsonPath) && readJson(packageJsonPath, host).typings === null;
if (!isNotNeededPackage) {
result.push(ts.getBaseFileName(normalized));
}
}
}
}
}
}
return result;
}
ts.getAutomaticTypeDirectiveNames = getAutomaticTypeDirectiveNames;
function createModuleResolutionCache(currentDirectory, getCanonicalFileName) {
var directoryToModuleNameMap = ts.createMap();
var moduleNameToDirectoryMap = ts.createMap();
return { getOrCreateCacheForDirectory: getOrCreateCacheForDirectory, getOrCreateCacheForModuleName: getOrCreateCacheForModuleName };
function getOrCreateCacheForDirectory(directoryName) {
var path = ts.toPath(directoryName, currentDirectory, getCanonicalFileName);
var perFolderCache = directoryToModuleNameMap.get(path);
if (!perFolderCache) {
perFolderCache = ts.createMap();
directoryToModuleNameMap.set(path, perFolderCache);
}
return perFolderCache;
}
function getOrCreateCacheForModuleName(nonRelativeModuleName) {
if (ts.isExternalModuleNameRelative(nonRelativeModuleName)) {
return undefined;
}
var perModuleNameCache = moduleNameToDirectoryMap.get(nonRelativeModuleName);
if (!perModuleNameCache) {
perModuleNameCache = createPerModuleNameCache();
moduleNameToDirectoryMap.set(nonRelativeModuleName, perModuleNameCache);
}
return perModuleNameCache;
}
function createPerModuleNameCache() {
var directoryPathMap = ts.createMap();
return { get: get, set: set };
function get(directory) {
return directoryPathMap.get(ts.toPath(directory, currentDirectory, getCanonicalFileName));
}
function set(directory, result) {
var path = ts.toPath(directory, currentDirectory, getCanonicalFileName);
if (directoryPathMap.has(path)) {
return;
}
directoryPathMap.set(path, result);
var resolvedFileName = result.resolvedModule && result.resolvedModule.resolvedFileName;
var commonPrefix = getCommonPrefix(path, resolvedFileName);
var current = path;
while (true) {
var parent = ts.getDirectoryPath(current);
if (parent === current || directoryPathMap.has(parent)) {
break;
}
directoryPathMap.set(parent, result);
current = parent;
if (current === commonPrefix) {
break;
}
}
}
function getCommonPrefix(directory, resolution) {
if (resolution === undefined) {
return undefined;
}
var resolutionDirectory = ts.toPath(ts.getDirectoryPath(resolution), currentDirectory, getCanonicalFileName);
var i = 0;
while (i < Math.min(directory.length, resolutionDirectory.length) && directory.charCodeAt(i) === resolutionDirectory.charCodeAt(i)) {
i++;
}
var sep = directory.lastIndexOf(ts.directorySeparator, i);
if (sep < 0) {
return undefined;
}
return directory.substr(0, sep);
}
}
}
ts.createModuleResolutionCache = createModuleResolutionCache;
function resolveModuleName(moduleName, containingFile, compilerOptions, host, cache) {
var traceEnabled = isTraceEnabled(compilerOptions, host);
if (traceEnabled) {
trace(host, ts.Diagnostics.Resolving_module_0_from_1, moduleName, containingFile);
}
var containingDirectory = ts.getDirectoryPath(containingFile);
var perFolderCache = cache && cache.getOrCreateCacheForDirectory(containingDirectory);
var result = perFolderCache && perFolderCache.get(moduleName);
if (result) {
if (traceEnabled) {
trace(host, ts.Diagnostics.Resolution_for_module_0_was_found_in_cache, moduleName);
}
}
else {
var moduleResolution = compilerOptions.moduleResolution;
if (moduleResolution === undefined) {
moduleResolution = ts.getEmitModuleKind(compilerOptions) === ts.ModuleKind.CommonJS ? ts.ModuleResolutionKind.NodeJs : ts.ModuleResolutionKind.Classic;
if (traceEnabled) {
trace(host, ts.Diagnostics.Module_resolution_kind_is_not_specified_using_0, ts.ModuleResolutionKind[moduleResolution]);
}
}
else {
if (traceEnabled) {
trace(host, ts.Diagnostics.Explicitly_specified_module_resolution_kind_Colon_0, ts.ModuleResolutionKind[moduleResolution]);
}
}
switch (moduleResolution) {
case ts.ModuleResolutionKind.NodeJs:
result = nodeModuleNameResolver(moduleName, containingFile, compilerOptions, host, cache);
break;
case ts.ModuleResolutionKind.Classic:
result = classicNameResolver(moduleName, containingFile, compilerOptions, host, cache);
break;
default:
ts.Debug.fail("Unexpected moduleResolution: " + moduleResolution);
}
if (perFolderCache) {
perFolderCache.set(moduleName, result);
var perModuleNameCache = cache.getOrCreateCacheForModuleName(moduleName);
if (perModuleNameCache) {
perModuleNameCache.set(containingDirectory, result);
}
}
}
if (traceEnabled) {
if (result.resolvedModule) {
trace(host, ts.Diagnostics.Module_name_0_was_successfully_resolved_to_1, moduleName, result.resolvedModule.resolvedFileName);
}
else {
trace(host, ts.Diagnostics.Module_name_0_was_not_resolved, moduleName);
}
}
return result;
}
ts.resolveModuleName = resolveModuleName;
function tryLoadModuleUsingOptionalResolutionSettings(extensions, moduleName, containingDirectory, loader, failedLookupLocations, state) {
if (!ts.isExternalModuleNameRelative(moduleName)) {
return tryLoadModuleUsingBaseUrl(extensions, moduleName, loader, failedLookupLocations, state);
}
else {
return tryLoadModuleUsingRootDirs(extensions, moduleName, containingDirectory, loader, failedLookupLocations, state);
}
}
function tryLoadModuleUsingRootDirs(extensions, moduleName, containingDirectory, loader, failedLookupLocations, state) {
if (!state.compilerOptions.rootDirs) {
return undefined;
}
if (state.traceEnabled) {
trace(state.host, ts.Diagnostics.rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0, moduleName);
}
var candidate = ts.normalizePath(ts.combinePaths(containingDirectory, moduleName));
var matchedRootDir;
var matchedNormalizedPrefix;
for (var _i = 0, _a = state.compilerOptions.rootDirs; _i < _a.length; _i++) {
var rootDir = _a[_i];
var normalizedRoot = ts.normalizePath(rootDir);
if (!ts.endsWith(normalizedRoot, ts.directorySeparator)) {
normalizedRoot += ts.directorySeparator;
}
var isLongestMatchingPrefix = ts.startsWith(candidate, normalizedRoot) &&
(matchedNormalizedPrefix === undefined || matchedNormalizedPrefix.length < normalizedRoot.length);
if (state.traceEnabled) {
trace(state.host, ts.Diagnostics.Checking_if_0_is_the_longest_matching_prefix_for_1_2, normalizedRoot, candidate, isLongestMatchingPrefix);
}
if (isLongestMatchingPrefix) {
matchedNormalizedPrefix = normalizedRoot;
matchedRootDir = rootDir;
}
}
if (matchedNormalizedPrefix) {
if (state.traceEnabled) {
trace(state.host, ts.Diagnostics.Longest_matching_prefix_for_0_is_1, candidate, matchedNormalizedPrefix);
}
var suffix = candidate.substr(matchedNormalizedPrefix.length);
if (state.traceEnabled) {
trace(state.host, ts.Diagnostics.Loading_0_from_the_root_dir_1_candidate_location_2, suffix, matchedNormalizedPrefix, candidate);
}
var resolvedFileName = loader(extensions, candidate, failedLookupLocations, !directoryProbablyExists(containingDirectory, state.host), state);
if (resolvedFileName) {
return resolvedFileName;
}
if (state.traceEnabled) {
trace(state.host, ts.Diagnostics.Trying_other_entries_in_rootDirs);
}
for (var _b = 0, _c = state.compilerOptions.rootDirs; _b < _c.length; _b++) {
var rootDir = _c[_b];
if (rootDir === matchedRootDir) {
continue;
}
var candidate_1 = ts.combinePaths(ts.normalizePath(rootDir), suffix);
if (state.traceEnabled) {
trace(state.host, ts.Diagnostics.Loading_0_from_the_root_dir_1_candidate_location_2, suffix, rootDir, candidate_1);
}
var baseDirectory = ts.getDirectoryPath(candidate_1);
var resolvedFileName_1 = loader(extensions, candidate_1, failedLookupLocations, !directoryProbablyExists(baseDirectory, state.host), state);
if (resolvedFileName_1) {
return resolvedFileName_1;
}
}
if (state.traceEnabled) {
trace(state.host, ts.Diagnostics.Module_resolution_using_rootDirs_has_failed);
}
}
return undefined;
}
function tryLoadModuleUsingBaseUrl(extensions, moduleName, loader, failedLookupLocations, state) {
if (!state.compilerOptions.baseUrl) {
return undefined;
}
if (state.traceEnabled) {
trace(state.host, ts.Diagnostics.baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1, state.compilerOptions.baseUrl, moduleName);
}
var matchedPattern = undefined;
if (state.compilerOptions.paths) {
if (state.traceEnabled) {
trace(state.host, ts.Diagnostics.paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0, moduleName);
}
matchedPattern = ts.matchPatternOrExact(ts.getOwnKeys(state.compilerOptions.paths), moduleName);
}
if (matchedPattern) {
var matchedStar_1 = ts.isString(matchedPattern) ? undefined : ts.matchedText(matchedPattern, moduleName);
var matchedPatternText = ts.isString(matchedPattern) ? matchedPattern : ts.patternText(matchedPattern);
if (state.traceEnabled) {
trace(state.host, ts.Diagnostics.Module_name_0_matched_pattern_1, moduleName, matchedPatternText);
}
return ts.forEach(state.compilerOptions.paths[matchedPatternText], function (subst) {
var path = matchedStar_1 ? subst.replace("*", matchedStar_1) : subst;
var candidate = ts.normalizePath(ts.combinePaths(state.compilerOptions.baseUrl, path));
if (state.traceEnabled) {
trace(state.host, ts.Diagnostics.Trying_substitution_0_candidate_module_location_Colon_1, subst, path);
}
var extension = ts.tryGetExtensionFromPath(candidate);
if (extension !== undefined) {
var path_1 = tryFile(candidate, failedLookupLocations, false, state);
if (path_1 !== undefined) {
return noPackageId({ path: path_1, ext: extension });
}
}
return loader(extensions, candidate, failedLookupLocations, !directoryProbablyExists(ts.getDirectoryPath(candidate), state.host), state);
});
}
else {
var candidate = ts.normalizePath(ts.combinePaths(state.compilerOptions.baseUrl, moduleName));
if (state.traceEnabled) {
trace(state.host, ts.Diagnostics.Resolving_module_name_0_relative_to_base_url_1_2, moduleName, state.compilerOptions.baseUrl, candidate);
}
return loader(extensions, candidate, failedLookupLocations, !directoryProbablyExists(ts.getDirectoryPath(candidate), state.host), state);
}
}
function nodeModuleNameResolver(moduleName, containingFile, compilerOptions, host, cache) {
return nodeModuleNameResolverWorker(moduleName, ts.getDirectoryPath(containingFile), compilerOptions, host, cache, false);
}
ts.nodeModuleNameResolver = nodeModuleNameResolver;
function resolveJavaScriptModule(moduleName, initialDir, host) {
var _a = nodeModuleNameResolverWorker(moduleName, initialDir, { moduleResolution: ts.ModuleResolutionKind.NodeJs, allowJs: true }, host, undefined, true), resolvedModule = _a.resolvedModule, failedLookupLocations = _a.failedLookupLocations;
if (!resolvedModule) {
throw new Error("Could not resolve JS module '" + moduleName + "' starting at '" + initialDir + "'. Looked in: " + failedLookupLocations.join(", "));
}
return resolvedModule.resolvedFileName;
}
ts.resolveJavaScriptModule = resolveJavaScriptModule;
function nodeModuleNameResolverWorker(moduleName, containingDirectory, compilerOptions, host, cache, jsOnly) {
var traceEnabled = isTraceEnabled(compilerOptions, host);
var failedLookupLocations = [];
var state = { compilerOptions: compilerOptions, host: host, traceEnabled: traceEnabled };
var result = jsOnly ? tryResolve(Extensions.JavaScript) : (tryResolve(Extensions.TypeScript) || tryResolve(Extensions.JavaScript));
if (result && result.value) {
var _a = result.value, resolved = _a.resolved, isExternalLibraryImport = _a.isExternalLibraryImport;
return createResolvedModuleWithFailedLookupLocations(resolved, isExternalLibraryImport, failedLookupLocations);
}
return { resolvedModule: undefined, failedLookupLocations: failedLookupLocations };
function tryResolve(extensions) {
var loader = function (extensions, candidate, failedLookupLocations, onlyRecordFailures, state) { return nodeLoadModuleByRelativeName(extensions, candidate, failedLookupLocations, onlyRecordFailures, state, true); };
var resolved = tryLoadModuleUsingOptionalResolutionSettings(extensions, moduleName, containingDirectory, loader, failedLookupLocations, state);
if (resolved) {
return toSearchResult({ resolved: resolved, isExternalLibraryImport: false });
}
if (!ts.isExternalModuleNameRelative(moduleName)) {
if (traceEnabled) {
trace(host, ts.Diagnostics.Loading_module_0_from_node_modules_folder_target_file_type_1, moduleName, Extensions[extensions]);
}
var resolved_1 = loadModuleFromNodeModules(extensions, moduleName, containingDirectory, failedLookupLocations, state, cache);
if (!resolved_1)
return undefined;
var resolvedValue = resolved_1.value;
if (!compilerOptions.preserveSymlinks) {
resolvedValue = resolvedValue && __assign({}, resolved_1.value, { path: realPath(resolved_1.value.path, host, traceEnabled), extension: resolved_1.value.extension });
}
return { value: resolvedValue && { resolved: resolvedValue, isExternalLibraryImport: true } };
}
else {
var _a = ts.normalizePathAndParts(ts.combinePaths(containingDirectory, moduleName)), candidate = _a.path, parts = _a.parts;
var resolved_2 = nodeLoadModuleByRelativeName(extensions, candidate, failedLookupLocations, false, state, true);
return resolved_2 && toSearchResult({ resolved: resolved_2, isExternalLibraryImport: ts.contains(parts, "node_modules") });
}
}
}
function realPath(path, host, traceEnabled) {
if (!host.realpath) {
return path;
}
var real = ts.normalizePath(host.realpath(path));
if (traceEnabled) {
trace(host, ts.Diagnostics.Resolving_real_path_for_0_result_1, path, real);
}
return real;
}
function nodeLoadModuleByRelativeName(extensions, candidate, failedLookupLocations, onlyRecordFailures, state, considerPackageJson) {
if (state.traceEnabled) {
trace(state.host, ts.Diagnostics.Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1, candidate, Extensions[extensions]);
}
if (!ts.pathEndsWithDirectorySeparator(candidate)) {
if (!onlyRecordFailures) {
var parentOfCandidate = ts.getDirectoryPath(candidate);
if (!directoryProbablyExists(parentOfCandidate, state.host)) {
if (state.traceEnabled) {
trace(state.host, ts.Diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it, parentOfCandidate);
}
onlyRecordFailures = true;
}
}
var resolvedFromFile = loadModuleFromFile(extensions, candidate, failedLookupLocations, onlyRecordFailures, state);
if (resolvedFromFile) {
return noPackageId(resolvedFromFile);
}
}
if (!onlyRecordFailures) {
var candidateExists = directoryProbablyExists(candidate, state.host);
if (!candidateExists) {
if (state.traceEnabled) {
trace(state.host, ts.Diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it, candidate);
}
onlyRecordFailures = true;
}
}
return loadNodeModuleFromDirectory(extensions, candidate, failedLookupLocations, onlyRecordFailures, state, considerPackageJson);
}
function directoryProbablyExists(directoryName, host) {
return !host.directoryExists || host.directoryExists(directoryName);
}
ts.directoryProbablyExists = directoryProbablyExists;
function loadModuleFromFileNoPackageId(extensions, candidate, failedLookupLocations, onlyRecordFailures, state) {
return noPackageId(loadModuleFromFile(extensions, candidate, failedLookupLocations, onlyRecordFailures, state));
}
function loadModuleFromFile(extensions, candidate, failedLookupLocations, onlyRecordFailures, state) {
var resolvedByAddingExtension = tryAddingExtensions(candidate, extensions, failedLookupLocations, onlyRecordFailures, state);
if (resolvedByAddingExtension) {
return resolvedByAddingExtension;
}
if (ts.hasJavaScriptFileExtension(candidate)) {
var extensionless = ts.removeFileExtension(candidate);
if (state.traceEnabled) {
var extension = candidate.substring(extensionless.length);
trace(state.host, ts.Diagnostics.File_name_0_has_a_1_extension_stripping_it, candidate, extension);
}
return tryAddingExtensions(extensionless, extensions, failedLookupLocations, onlyRecordFailures, state);
}
}
function tryAddingExtensions(candidate, extensions, failedLookupLocations, onlyRecordFailures, state) {
if (!onlyRecordFailures) {
var directory = ts.getDirectoryPath(candidate);
if (directory) {
onlyRecordFailures = !directoryProbablyExists(directory, state.host);
}
}
switch (extensions) {
case Extensions.DtsOnly:
return tryExtension(".d.ts");
case Extensions.TypeScript:
return tryExtension(".ts") || tryExtension(".tsx") || tryExtension(".d.ts");
case Extensions.JavaScript:
return tryExtension(".js") || tryExtension(".jsx");
}
function tryExtension(ext) {
var path = tryFile(candidate + ext, failedLookupLocations, onlyRecordFailures, state);
return path && { path: path, ext: ext };
}
}
function tryFile(fileName, failedLookupLocations, onlyRecordFailures, state) {
if (!onlyRecordFailures) {
if (state.host.fileExists(fileName)) {
if (state.traceEnabled) {
trace(state.host, ts.Diagnostics.File_0_exist_use_it_as_a_name_resolution_result, fileName);
}
return fileName;
}
else {
if (state.traceEnabled) {
trace(state.host, ts.Diagnostics.File_0_does_not_exist, fileName);
}
}
}
failedLookupLocations.push(fileName);
return undefined;
}
function loadNodeModuleFromDirectory(extensions, candidate, failedLookupLocations, onlyRecordFailures, state, considerPackageJson) {
if (considerPackageJson === void 0) { considerPackageJson = true; }
var _a = considerPackageJson
? getPackageJsonInfo(candidate, "", failedLookupLocations, onlyRecordFailures, state)
: { packageJsonContent: undefined, packageId: undefined }, packageJsonContent = _a.packageJsonContent, packageId = _a.packageId;
return withPackageId(packageId, loadNodeModuleFromDirectoryWorker(extensions, candidate, failedLookupLocations, onlyRecordFailures, state, packageJsonContent));
}
function loadNodeModuleFromDirectoryWorker(extensions, candidate, failedLookupLocations, onlyRecordFailures, state, packageJsonContent) {
var fromPackageJson = packageJsonContent && loadModuleFromPackageJson(packageJsonContent, extensions, candidate, failedLookupLocations, state);
if (fromPackageJson) {
return fromPackageJson;
}
var directoryExists = !onlyRecordFailures && directoryProbablyExists(candidate, state.host);
return loadModuleFromFile(extensions, ts.combinePaths(candidate, "index"), failedLookupLocations, !directoryExists, state);
}
function getPackageJsonInfo(nodeModuleDirectory, subModuleName, failedLookupLocations, onlyRecordFailures, _a) {
var host = _a.host, traceEnabled = _a.traceEnabled;
var directoryExists = !onlyRecordFailures && directoryProbablyExists(nodeModuleDirectory, host);
var packageJsonPath = pathToPackageJson(nodeModuleDirectory);
if (directoryExists && host.fileExists(packageJsonPath)) {
if (traceEnabled) {
trace(host, ts.Diagnostics.Found_package_json_at_0, packageJsonPath);
}
var packageJsonContent = readJson(packageJsonPath, host);
var packageId = typeof packageJsonContent.name === "string" && typeof packageJsonContent.version === "string"
? { name: packageJsonContent.name, subModuleName: subModuleName, version: packageJsonContent.version }
: undefined;
return { found: true, packageJsonContent: packageJsonContent, packageId: packageId };
}
else {
if (directoryExists && traceEnabled) {
trace(host, ts.Diagnostics.File_0_does_not_exist, packageJsonPath);
}
failedLookupLocations.push(packageJsonPath);
return { found: false, packageJsonContent: undefined, packageId: undefined };
}
}
function loadModuleFromPackageJson(jsonContent, extensions, candidate, failedLookupLocations, state) {
var file = tryReadPackageJsonFields(extensions !== Extensions.JavaScript, jsonContent, candidate, state);
if (!file) {
return undefined;
}
var onlyRecordFailures = !directoryProbablyExists(ts.getDirectoryPath(file), state.host);
var fromFile = tryFile(file, failedLookupLocations, onlyRecordFailures, state);
if (fromFile) {
var resolved = fromFile && resolvedIfExtensionMatches(extensions, fromFile);
if (resolved) {
return resolved;
}
if (state.traceEnabled) {
trace(state.host, ts.Diagnostics.File_0_has_an_unsupported_extension_so_skipping_it, fromFile);
}
}
var nextExtensions = extensions === Extensions.DtsOnly ? Extensions.TypeScript : extensions;
var result = nodeLoadModuleByRelativeName(nextExtensions, file, failedLookupLocations, onlyRecordFailures, state, false);
if (result) {
ts.Debug.assert(result.packageId === undefined);
return { path: result.path, ext: result.extension };
}
}
function resolvedIfExtensionMatches(extensions, path) {
var ext = ts.tryGetExtensionFromPath(path);
return ext !== undefined && extensionIsOk(extensions, ext) ? { path: path, ext: ext } : undefined;
}
function extensionIsOk(extensions, extension) {
switch (extensions) {
case Extensions.JavaScript:
return extension === ".js" || extension === ".jsx";
case Extensions.TypeScript:
return extension === ".ts" || extension === ".tsx" || extension === ".d.ts";
case Extensions.DtsOnly:
return extension === ".d.ts";
}
}
function pathToPackageJson(directory) {
return ts.combinePaths(directory, "package.json");
}
function loadModuleFromNodeModulesFolder(extensions, moduleName, nodeModulesFolder, nodeModulesFolderExists, failedLookupLocations, state) {
var candidate = ts.normalizePath(ts.combinePaths(nodeModulesFolder, moduleName));
var packageJsonContent;
var packageId;
var packageInfo = getPackageJsonInfo(candidate, "", failedLookupLocations, !nodeModulesFolderExists, state);
if (packageInfo.found) {
(packageJsonContent = packageInfo.packageJsonContent, packageId = packageInfo.packageId);
}
else {
var _a = getPackageName(moduleName), packageName = _a.packageName, rest = _a.rest;
if (rest !== "") {
var packageRootPath = ts.combinePaths(nodeModulesFolder, packageName);
packageId = getPackageJsonInfo(packageRootPath, rest, failedLookupLocations, !nodeModulesFolderExists, state).packageId;
}
}
var pathAndExtension = loadModuleFromFile(extensions, candidate, failedLookupLocations, !nodeModulesFolderExists, state) ||
loadNodeModuleFromDirectoryWorker(extensions, candidate, failedLookupLocations, !nodeModulesFolderExists, state, packageJsonContent);
return withPackageId(packageId, pathAndExtension);
}
function getPackageName(moduleName) {
var idx = moduleName.indexOf(ts.directorySeparator);
if (moduleName[0] === "@") {
idx = moduleName.indexOf(ts.directorySeparator, idx + 1);
}
return idx === -1 ? { packageName: moduleName, rest: "" } : { packageName: moduleName.slice(0, idx), rest: moduleName.slice(idx + 1) };
}
ts.getPackageName = getPackageName;
function loadModuleFromNodeModules(extensions, moduleName, directory, failedLookupLocations, state, cache) {
return loadModuleFromNodeModulesWorker(extensions, moduleName, directory, failedLookupLocations, state, false, cache);
}
function loadModuleFromNodeModulesAtTypes(moduleName, directory, failedLookupLocations, state) {
return loadModuleFromNodeModulesWorker(Extensions.DtsOnly, moduleName, directory, failedLookupLocations, state, true, undefined);
}
function loadModuleFromNodeModulesWorker(extensions, moduleName, directory, failedLookupLocations, state, typesOnly, cache) {
var perModuleNameCache = cache && cache.getOrCreateCacheForModuleName(moduleName);
return ts.forEachAncestorDirectory(ts.normalizeSlashes(directory), function (ancestorDirectory) {
if (ts.getBaseFileName(ancestorDirectory) !== "node_modules") {
var resolutionFromCache = tryFindNonRelativeModuleNameInCache(perModuleNameCache, moduleName, ancestorDirectory, state.traceEnabled, state.host);
if (resolutionFromCache) {
return resolutionFromCache;
}
return toSearchResult(loadModuleFromNodeModulesOneLevel(extensions, moduleName, ancestorDirectory, failedLookupLocations, state, typesOnly));
}
});
}
function loadModuleFromNodeModulesOneLevel(extensions, moduleName, directory, failedLookupLocations, state, typesOnly) {
if (typesOnly === void 0) { typesOnly = false; }
var nodeModulesFolder = ts.combinePaths(directory, "node_modules");
var nodeModulesFolderExists = directoryProbablyExists(nodeModulesFolder, state.host);
if (!nodeModulesFolderExists && state.traceEnabled) {
trace(state.host, ts.Diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it, nodeModulesFolder);
}
var packageResult = typesOnly ? undefined : loadModuleFromNodeModulesFolder(extensions, moduleName, nodeModulesFolder, nodeModulesFolderExists, failedLookupLocations, state);
if (packageResult) {
return packageResult;
}
if (extensions !== Extensions.JavaScript) {
var nodeModulesAtTypes_1 = ts.combinePaths(nodeModulesFolder, "@types");
var nodeModulesAtTypesExists = nodeModulesFolderExists;
if (nodeModulesFolderExists && !directoryProbablyExists(nodeModulesAtTypes_1, state.host)) {
if (state.traceEnabled) {
trace(state.host, ts.Diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it, nodeModulesAtTypes_1);
}
nodeModulesAtTypesExists = false;
}
return loadModuleFromNodeModulesFolder(Extensions.DtsOnly, mangleScopedPackage(moduleName, state), nodeModulesAtTypes_1, nodeModulesAtTypesExists, failedLookupLocations, state);
}
}
var mangledScopedPackageSeparator = "__";
function mangleScopedPackage(packageName, state) {
var mangled = getMangledNameForScopedPackage(packageName);
if (state.traceEnabled && mangled !== packageName) {
trace(state.host, ts.Diagnostics.Scoped_package_detected_looking_in_0, mangled);
}
return mangled;
}
function getTypesPackageName(packageName) {
return "@types/" + getMangledNameForScopedPackage(packageName);
}
ts.getTypesPackageName = getTypesPackageName;
function getMangledNameForScopedPackage(packageName) {
if (ts.startsWith(packageName, "@")) {
var replaceSlash = packageName.replace(ts.directorySeparator, mangledScopedPackageSeparator);
if (replaceSlash !== packageName) {
return replaceSlash.slice(1);
}
}
return packageName;
}
function getPackageNameFromAtTypesDirectory(mangledName) {
var withoutAtTypePrefix = ts.removePrefix(mangledName, "@types/");
if (withoutAtTypePrefix !== mangledName) {
return ts.stringContains(withoutAtTypePrefix, mangledScopedPackageSeparator) ?
"@" + withoutAtTypePrefix.replace(mangledScopedPackageSeparator, ts.directorySeparator) :
withoutAtTypePrefix;
}
return mangledName;
}
ts.getPackageNameFromAtTypesDirectory = getPackageNameFromAtTypesDirectory;
function tryFindNonRelativeModuleNameInCache(cache, moduleName, containingDirectory, traceEnabled, host) {
var result = cache && cache.get(containingDirectory);
if (result) {
if (traceEnabled) {
trace(host, ts.Diagnostics.Resolution_for_module_0_was_found_in_cache, moduleName);
}
return { value: result.resolvedModule && { path: result.resolvedModule.resolvedFileName, extension: result.resolvedModule.extension, packageId: result.resolvedModule.packageId } };
}
}
function classicNameResolver(moduleName, containingFile, compilerOptions, host, cache) {
var traceEnabled = isTraceEnabled(compilerOptions, host);
var state = { compilerOptions: compilerOptions, host: host, traceEnabled: traceEnabled };
var failedLookupLocations = [];
var containingDirectory = ts.getDirectoryPath(containingFile);
var resolved = tryResolve(Extensions.TypeScript) || tryResolve(Extensions.JavaScript);
return createResolvedModuleWithFailedLookupLocations(resolved && resolved.value, false, failedLookupLocations);
function tryResolve(extensions) {
var resolvedUsingSettings = tryLoadModuleUsingOptionalResolutionSettings(extensions, moduleName, containingDirectory, loadModuleFromFileNoPackageId, failedLookupLocations, state);
if (resolvedUsingSettings) {
return { value: resolvedUsingSettings };
}
var perModuleNameCache = cache && cache.getOrCreateCacheForModuleName(moduleName);
if (!ts.isExternalModuleNameRelative(moduleName)) {
var resolved_3 = ts.forEachAncestorDirectory(containingDirectory, function (directory) {
var resolutionFromCache = tryFindNonRelativeModuleNameInCache(perModuleNameCache, moduleName, directory, traceEnabled, host);
if (resolutionFromCache) {
return resolutionFromCache;
}
var searchName = ts.normalizePath(ts.combinePaths(directory, moduleName));
return toSearchResult(loadModuleFromFileNoPackageId(extensions, searchName, failedLookupLocations, false, state));
});
if (resolved_3) {
return resolved_3;
}
if (extensions === Extensions.TypeScript) {
return loadModuleFromNodeModulesAtTypes(moduleName, containingDirectory, failedLookupLocations, state);
}
}
else {
var candidate = ts.normalizePath(ts.combinePaths(containingDirectory, moduleName));
return toSearchResult(loadModuleFromFileNoPackageId(extensions, candidate, failedLookupLocations, false, state));
}
}
}
ts.classicNameResolver = classicNameResolver;
function loadModuleFromGlobalCache(moduleName, projectName, compilerOptions, host, globalCache) {
var traceEnabled = isTraceEnabled(compilerOptions, host);
if (traceEnabled) {
trace(host, ts.Diagnostics.Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using_cache_location_2, projectName, moduleName, globalCache);
}
var state = { compilerOptions: compilerOptions, host: host, traceEnabled: traceEnabled };
var failedLookupLocations = [];
var resolved = loadModuleFromNodeModulesOneLevel(Extensions.DtsOnly, moduleName, globalCache, failedLookupLocations, state);
return createResolvedModuleWithFailedLookupLocations(resolved, true, failedLookupLocations);
}
ts.loadModuleFromGlobalCache = loadModuleFromGlobalCache;
function toSearchResult(value) {
return value !== undefined ? { value: value } : undefined;
}
})(ts || (ts = {}));
var ts;
(function (ts) {
var ambientModuleSymbolRegex = /^".+"$/;
var nextSymbolId = 1;
var nextNodeId = 1;
var nextMergeId = 1;
var nextFlowId = 1;
function getNodeId(node) {
if (!node.id) {
node.id = nextNodeId;
nextNodeId++;
}
return node.id;
}
ts.getNodeId = getNodeId;
function getSymbolId(symbol) {
if (!symbol.id) {
symbol.id = nextSymbolId;
nextSymbolId++;
}
return symbol.id;
}
ts.getSymbolId = getSymbolId;
function isInstantiatedModule(node, preserveConstEnums) {
var moduleState = ts.getModuleInstanceState(node);
return moduleState === 1 ||
(preserveConstEnums && moduleState === 2);
}
ts.isInstantiatedModule = isInstantiatedModule;
function createTypeChecker(host, produceDiagnostics) {
var cancellationToken;
var requestedExternalEmitHelpers;
var externalHelpersModule;
var Symbol = ts.objectAllocator.getSymbolConstructor();
var Type = ts.objectAllocator.getTypeConstructor();
var Signature = ts.objectAllocator.getSignatureConstructor();
var typeCount = 0;
var symbolCount = 0;
var enumCount = 0;
var symbolInstantiationDepth = 0;
var emptySymbols = ts.createSymbolTable();
var identityMapper = ts.identity;
var compilerOptions = host.getCompilerOptions();
var languageVersion = ts.getEmitScriptTarget(compilerOptions);
var modulekind = ts.getEmitModuleKind(compilerOptions);
var noUnusedIdentifiers = !!compilerOptions.noUnusedLocals || !!compilerOptions.noUnusedParameters;
var allowSyntheticDefaultImports = typeof compilerOptions.allowSyntheticDefaultImports !== "undefined" ? compilerOptions.allowSyntheticDefaultImports : modulekind === ts.ModuleKind.System;
var strictNullChecks = compilerOptions.strictNullChecks === undefined ? compilerOptions.strict : compilerOptions.strictNullChecks;
var strictFunctionTypes = compilerOptions.strictFunctionTypes === undefined ? compilerOptions.strict : compilerOptions.strictFunctionTypes;
var noImplicitAny = compilerOptions.noImplicitAny === undefined ? compilerOptions.strict : compilerOptions.noImplicitAny;
var noImplicitThis = compilerOptions.noImplicitThis === undefined ? compilerOptions.strict : compilerOptions.noImplicitThis;
var emitResolver = createResolver();
var nodeBuilder = createNodeBuilder();
var undefinedSymbol = createSymbol(4, "undefined");
undefinedSymbol.declarations = [];
var argumentsSymbol = createSymbol(4, "arguments");
var apparentArgumentCount;
var checker = {
getNodeCount: function () { return ts.sum(host.getSourceFiles(), "nodeCount"); },
getIdentifierCount: function () { return ts.sum(host.getSourceFiles(), "identifierCount"); },
getSymbolCount: function () { return ts.sum(host.getSourceFiles(), "symbolCount") + symbolCount; },
getTypeCount: function () { return typeCount; },
isUndefinedSymbol: function (symbol) { return symbol === undefinedSymbol; },
isArgumentsSymbol: function (symbol) { return symbol === argumentsSymbol; },
isUnknownSymbol: function (symbol) { return symbol === unknownSymbol; },
getMergedSymbol: getMergedSymbol,
getDiagnostics: getDiagnostics,
getGlobalDiagnostics: getGlobalDiagnostics,
getTypeOfSymbolAtLocation: function (symbol, location) {
location = ts.getParseTreeNode(location);
return location ? getTypeOfSymbolAtLocation(symbol, location) : unknownType;
},
getSymbolsOfParameterPropertyDeclaration: function (parameter, parameterName) {
parameter = ts.getParseTreeNode(parameter, ts.isParameter);
ts.Debug.assert(parameter !== undefined, "Cannot get symbols of a synthetic parameter that cannot be resolved to a parse-tree node.");
return getSymbolsOfParameterPropertyDeclaration(parameter, ts.escapeLeadingUnderscores(parameterName));
},
getDeclaredTypeOfSymbol: getDeclaredTypeOfSymbol,
getPropertiesOfType: getPropertiesOfType,
getPropertyOfType: function (type, name) { return getPropertyOfType(type, ts.escapeLeadingUnderscores(name)); },
getIndexInfoOfType: getIndexInfoOfType,
getSignaturesOfType: getSignaturesOfType,
getIndexTypeOfType: getIndexTypeOfType,
getBaseTypes: getBaseTypes,
getBaseTypeOfLiteralType: getBaseTypeOfLiteralType,
getWidenedType: getWidenedType,
getTypeFromTypeNode: function (node) {
node = ts.getParseTreeNode(node, ts.isTypeNode);
return node ? getTypeFromTypeNode(node) : unknownType;
},
getParameterType: getTypeAtPosition,
getReturnTypeOfSignature: getReturnTypeOfSignature,
getNullableType: getNullableType,
getNonNullableType: getNonNullableType,
typeToTypeNode: nodeBuilder.typeToTypeNode,
indexInfoToIndexSignatureDeclaration: nodeBuilder.indexInfoToIndexSignatureDeclaration,
signatureToSignatureDeclaration: nodeBuilder.signatureToSignatureDeclaration,
getSymbolsInScope: function (location, meaning) {
location = ts.getParseTreeNode(location);
return location ? getSymbolsInScope(location, meaning) : [];
},
getSymbolAtLocation: function (node) {
node = ts.getParseTreeNode(node);
return node ? getSymbolAtLocation(node) : undefined;
},
getShorthandAssignmentValueSymbol: function (node) {
node = ts.getParseTreeNode(node);
return node ? getShorthandAssignmentValueSymbol(node) : undefined;
},
getExportSpecifierLocalTargetSymbol: function (node) {
node = ts.getParseTreeNode(node, ts.isExportSpecifier);
return node ? getExportSpecifierLocalTargetSymbol(node) : undefined;
},
getExportSymbolOfSymbol: function (symbol) {
return getMergedSymbol(symbol.exportSymbol || symbol);
},
getTypeAtLocation: function (node) {
node = ts.getParseTreeNode(node);
return node ? getTypeOfNode(node) : unknownType;
},
getPropertySymbolOfDestructuringAssignment: function (location) {
location = ts.getParseTreeNode(location, ts.isIdentifier);
return location ? getPropertySymbolOfDestructuringAssignment(location) : undefined;
},
signatureToString: function (signature, enclosingDeclaration, flags, kind) {
return signatureToString(signature, ts.getParseTreeNode(enclosingDeclaration), flags, kind);
},
typeToString: function (type, enclosingDeclaration, flags) {
return typeToString(type, ts.getParseTreeNode(enclosingDeclaration), flags);
},
getSymbolDisplayBuilder: getSymbolDisplayBuilder,
symbolToString: function (symbol, enclosingDeclaration, meaning) {
return symbolToString(symbol, ts.getParseTreeNode(enclosingDeclaration), meaning);
},
getAugmentedPropertiesOfType: getAugmentedPropertiesOfType,
getRootSymbols: getRootSymbols,
getContextualType: function (node) {
node = ts.getParseTreeNode(node, ts.isExpression);
return node ? getContextualType(node) : undefined;
},
getFullyQualifiedName: getFullyQualifiedName,
getResolvedSignature: function (node, candidatesOutArray, theArgumentCount) {
node = ts.getParseTreeNode(node, ts.isCallLikeExpression);
apparentArgumentCount = theArgumentCount;
var res = node ? getResolvedSignature(node, candidatesOutArray) : undefined;
apparentArgumentCount = undefined;
return res;
},
getConstantValue: function (node) {
node = ts.getParseTreeNode(node, canHaveConstantValue);
return node ? getConstantValue(node) : undefined;
},
isValidPropertyAccess: function (node, propertyName) {
node = ts.getParseTreeNode(node, ts.isPropertyAccessOrQualifiedName);
return node ? isValidPropertyAccess(node, ts.escapeLeadingUnderscores(propertyName)) : false;
},
getSignatureFromDeclaration: function (declaration) {
declaration = ts.getParseTreeNode(declaration, ts.isFunctionLike);
return declaration ? getSignatureFromDeclaration(declaration) : undefined;
},
isImplementationOfOverload: function (node) {
var parsed = ts.getParseTreeNode(node, ts.isFunctionLike);
return parsed ? isImplementationOfOverload(parsed) : undefined;
},
getImmediateAliasedSymbol: function (symbol) {
ts.Debug.assert((symbol.flags & 2097152) !== 0, "Should only get Alias here.");
var links = getSymbolLinks(symbol);
if (!links.immediateTarget) {
var node = getDeclarationOfAliasSymbol(symbol);
ts.Debug.assert(!!node);
links.immediateTarget = getTargetOfAliasDeclaration(node, true);
}
return links.immediateTarget;
},
getAliasedSymbol: resolveAlias,
getEmitResolver: getEmitResolver,
getExportsOfModule: getExportsOfModuleAsArray,
getExportsAndPropertiesOfModule: getExportsAndPropertiesOfModule,
getSymbolWalker: ts.createGetSymbolWalker(getRestTypeOfSignature, getReturnTypeOfSignature, getBaseTypes, resolveStructuredTypeMembers, getTypeOfSymbol, getResolvedSymbol, getIndexTypeOfStructuredType, getConstraintFromTypeParameter, getFirstIdentifier),
getAmbientModules: getAmbientModules,
getAllAttributesTypeFromJsxOpeningLikeElement: function (node) {
node = ts.getParseTreeNode(node, ts.isJsxOpeningLikeElement);
return node ? getAllAttributesTypeFromJsxOpeningLikeElement(node) : undefined;
},
getJsxIntrinsicTagNames: getJsxIntrinsicTagNames,
isOptionalParameter: function (node) {
node = ts.getParseTreeNode(node, ts.isParameter);
return node ? isOptionalParameter(node) : false;
},
tryGetMemberInModuleExports: function (name, symbol) { return tryGetMemberInModuleExports(ts.escapeLeadingUnderscores(name), symbol); },
tryGetMemberInModuleExportsAndProperties: function (name, symbol) { return tryGetMemberInModuleExportsAndProperties(ts.escapeLeadingUnderscores(name), symbol); },
tryFindAmbientModuleWithoutAugmentations: function (moduleName) {
return tryFindAmbientModule(moduleName, false);
},
getApparentType: getApparentType,
getUnionType: getUnionType,
createAnonymousType: createAnonymousType,
createSignature: createSignature,
createSymbol: createSymbol,
createIndexInfo: createIndexInfo,
getAnyType: function () { return anyType; },
getStringType: function () { return stringType; },
getNumberType: function () { return numberType; },
createPromiseType: createPromiseType,
createArrayType: createArrayType,
getBooleanType: function () { return booleanType; },
getVoidType: function () { return voidType; },
getUndefinedType: function () { return undefinedType; },
getNullType: function () { return nullType; },
getESSymbolType: function () { return esSymbolType; },
getNeverType: function () { return neverType; },
isSymbolAccessible: isSymbolAccessible,
isArrayLikeType: isArrayLikeType,
getAllPossiblePropertiesOfTypes: getAllPossiblePropertiesOfTypes,
getSuggestionForNonexistentProperty: function (node, type) { return getSuggestionForNonexistentProperty(node, type); },
getSuggestionForNonexistentSymbol: function (location, name, meaning) { return getSuggestionForNonexistentSymbol(location, ts.escapeLeadingUnderscores(name), meaning); },
getBaseConstraintOfType: getBaseConstraintOfType,
resolveName: function (name, location, meaning) {
return resolveName(location, ts.escapeLeadingUnderscores(name), meaning, undefined, undefined, false);
},
getJsxNamespace: function () { return ts.unescapeLeadingUnderscores(getJsxNamespace()); },
};
var tupleTypes = [];
var unionTypes = ts.createMap();
var intersectionTypes = ts.createMap();
var literalTypes = ts.createMap();
var indexedAccessTypes = ts.createMap();
var evolvingArrayTypes = [];
var unknownSymbol = createSymbol(4, "unknown");
var resolvingSymbol = createSymbol(0, "__resolving__");
var anyType = createIntrinsicType(1, "any");
var autoType = createIntrinsicType(1, "any");
var unknownType = createIntrinsicType(1, "unknown");
var undefinedType = createIntrinsicType(2048, "undefined");
var undefinedWideningType = strictNullChecks ? undefinedType : createIntrinsicType(2048 | 2097152, "undefined");
var nullType = createIntrinsicType(4096, "null");
var nullWideningType = strictNullChecks ? nullType : createIntrinsicType(4096 | 2097152, "null");
var stringType = createIntrinsicType(2, "string");
var numberType = createIntrinsicType(4, "number");
var trueType = createIntrinsicType(128, "true");
var falseType = createIntrinsicType(128, "false");
var booleanType = createBooleanType([trueType, falseType]);
var esSymbolType = createIntrinsicType(512, "symbol");
var voidType = createIntrinsicType(1024, "void");
var neverType = createIntrinsicType(8192, "never");
var silentNeverType = createIntrinsicType(8192, "never");
var nonPrimitiveType = createIntrinsicType(16777216, "object");
var emptyObjectType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
var emptyTypeLiteralSymbol = createSymbol(2048, "__type");
emptyTypeLiteralSymbol.members = ts.createSymbolTable();
var emptyTypeLiteralType = createAnonymousType(emptyTypeLiteralSymbol, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
var emptyGenericType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
emptyGenericType.instantiations = ts.createMap();
var anyFunctionType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
anyFunctionType.flags |= 8388608;
var noConstraintType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
var circularConstraintType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
var resolvingDefaultType = createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
var markerSuperType = createType(16384);
var markerSubType = createType(16384);
markerSubType.constraint = markerSuperType;
var markerOtherType = createType(16384);
var anySignature = createSignature(undefined, undefined, undefined, ts.emptyArray, anyType, undefined, 0, false, false);
var unknownSignature = createSignature(undefined, undefined, undefined, ts.emptyArray, unknownType, undefined, 0, false, false);
var resolvingSignature = createSignature(undefined, undefined, undefined, ts.emptyArray, anyType, undefined, 0, false, false);
var silentNeverSignature = createSignature(undefined, undefined, undefined, ts.emptyArray, silentNeverType, undefined, 0, false, false);
var enumNumberIndexInfo = createIndexInfo(stringType, true);
var jsObjectLiteralIndexInfo = createIndexInfo(anyType, false);
var globals = ts.createSymbolTable();
var ambientModulesCache;
var patternAmbientModules;
var globalObjectType;
var globalFunctionType;
var globalArrayType;
var globalReadonlyArrayType;
var globalStringType;
var globalNumberType;
var globalBooleanType;
var globalRegExpType;
var globalThisType;
var anyArrayType;
var autoArrayType;
var anyReadonlyArrayType;
var deferredGlobalESSymbolConstructorSymbol;
var deferredGlobalESSymbolType;
var deferredGlobalTypedPropertyDescriptorType;
var deferredGlobalPromiseType;
var deferredGlobalPromiseConstructorSymbol;
var deferredGlobalPromiseConstructorLikeType;
var deferredGlobalIterableType;
var deferredGlobalIteratorType;
var deferredGlobalIterableIteratorType;
var deferredGlobalAsyncIterableType;
var deferredGlobalAsyncIteratorType;
var deferredGlobalAsyncIterableIteratorType;
var deferredGlobalTemplateStringsArrayType;
var deferredJsxElementClassType;
var deferredJsxElementType;
var deferredJsxStatelessElementType;
var deferredNodes;
var deferredUnusedIdentifierNodes;
var flowLoopStart = 0;
var flowLoopCount = 0;
var sharedFlowCount = 0;
var flowAnalysisDisabled = false;
var emptyStringType = getLiteralType("");
var zeroType = getLiteralType(0);
var resolutionTargets = [];
var resolutionResults = [];
var resolutionPropertyNames = [];
var suggestionCount = 0;
var maximumSuggestionCount = 10;
var mergedSymbols = [];
var symbolLinks = [];
var nodeLinks = [];
var flowLoopCaches = [];
var flowLoopNodes = [];
var flowLoopKeys = [];
var flowLoopTypes = [];
var sharedFlowNodes = [];
var sharedFlowTypes = [];
var potentialThisCollisions = [];
var potentialNewTargetCollisions = [];
var awaitedTypeStack = [];
var diagnostics = ts.createDiagnosticCollection();
var typeofEQFacts = ts.createMapFromTemplate({
"string": 1,
"number": 2,
"boolean": 4,
"symbol": 8,
"undefined": 16384,
"object": 16,
"function": 32
});
var typeofNEFacts = ts.createMapFromTemplate({
"string": 128,
"number": 256,
"boolean": 512,
"symbol": 1024,
"undefined": 131072,
"object": 2048,
"function": 4096
});
var typeofTypesByName = ts.createMapFromTemplate({
"string": stringType,
"number": numberType,
"boolean": booleanType,
"symbol": esSymbolType,
"undefined": undefinedType
});
var typeofType = createTypeofType();
var _jsxNamespace;
var _jsxFactoryEntity;
var _jsxElementPropertiesName;
var _hasComputedJsxElementPropertiesName = false;
var _jsxElementChildrenPropertyName;
var _hasComputedJsxElementChildrenPropertyName = false;
var jsxTypes = ts.createUnderscoreEscapedMap();
var JsxNames = {
JSX: "JSX",
IntrinsicElements: "IntrinsicElements",
ElementClass: "ElementClass",
ElementAttributesPropertyNameContainer: "ElementAttributesProperty",
ElementChildrenAttributeNameContainer: "ElementChildrenAttribute",
Element: "Element",
IntrinsicAttributes: "IntrinsicAttributes",
IntrinsicClassAttributes: "IntrinsicClassAttributes"
};
var subtypeRelation = ts.createMap();
var assignableRelation = ts.createMap();
var comparableRelation = ts.createMap();
var identityRelation = ts.createMap();
var enumRelation = ts.createMap();
var _displayBuilder;
var builtinGlobals = ts.createSymbolTable();
builtinGlobals.set(undefinedSymbol.escapedName, undefinedSymbol);
var isNotOverloadAndNotAccessor = ts.and(isNotOverload, isNotAccessor);
initializeTypeChecker();
return checker;
function getJsxNamespace() {
if (!_jsxNamespace) {
_jsxNamespace = "React";
if (compilerOptions.jsxFactory) {
_jsxFactoryEntity = ts.parseIsolatedEntityName(compilerOptions.jsxFactory, languageVersion);
if (_jsxFactoryEntity) {
_jsxNamespace = getFirstIdentifier(_jsxFactoryEntity).escapedText;
}
}
else if (compilerOptions.reactNamespace) {
_jsxNamespace = ts.escapeLeadingUnderscores(compilerOptions.reactNamespace);
}
}
return _jsxNamespace;
}
function getEmitResolver(sourceFile, cancellationToken) {
getDiagnostics(sourceFile, cancellationToken);
return emitResolver;
}
function error(location, message, arg0, arg1, arg2) {
var diagnostic = location
? ts.createDiagnosticForNode(location, message, arg0, arg1, arg2)
: ts.createCompilerDiagnostic(message, arg0, arg1, arg2);
diagnostics.add(diagnostic);
}
function createSymbol(flags, name) {
symbolCount++;
var symbol = (new Symbol(flags | 33554432, name));
symbol.checkFlags = 0;
return symbol;
}
function isTransientSymbol(symbol) {
return (symbol.flags & 33554432) !== 0;
}
function getExcludedSymbolFlags(flags) {
var result = 0;
if (flags & 2)
result |= 107455;
if (flags & 1)
result |= 107454;
if (flags & 4)
result |= 0;
if (flags & 8)
result |= 900095;
if (flags & 16)
result |= 106927;
if (flags & 32)
result |= 899519;
if (flags & 64)
result |= 792968;
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 |= 530920;
if (flags & 524288)
result |= 793064;
if (flags & 2097152)
result |= 2097152;
return result;
}
function recordMergedSymbol(target, source) {
if (!source.mergeId) {
source.mergeId = nextMergeId;
nextMergeId++;
}
mergedSymbols[source.mergeId] = target;
}
function cloneSymbol(symbol) {
var result = createSymbol(symbol.flags, symbol.escapedName);
result.declarations = symbol.declarations ? symbol.declarations.slice() : [];
result.parent = symbol.parent;
if (symbol.valueDeclaration)
result.valueDeclaration = symbol.valueDeclaration;
if (symbol.constEnumOnlyModule)
result.constEnumOnlyModule = true;
if (symbol.members)
result.members = ts.cloneMap(symbol.members);
if (symbol.exports)
result.exports = ts.cloneMap(symbol.exports);
recordMergedSymbol(result, symbol);
return result;
}
function mergeSymbol(target, source) {
if (!(target.flags & getExcludedSymbolFlags(source.flags))) {
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 === 233 && source.valueDeclaration.kind !== 233))) {
target.valueDeclaration = source.valueDeclaration;
}
ts.addRange(target.declarations, source.declarations);
if (source.members) {
if (!target.members)
target.members = ts.createSymbolTable();
mergeSymbolTable(target.members, source.members);
}
if (source.exports) {
if (!target.exports)
target.exports = ts.createSymbolTable();
mergeSymbolTable(target.exports, source.exports);
}
recordMergedSymbol(target, source);
}
else if (target.flags & 1024) {
error(ts.getNameOfDeclaration(source.declarations[0]), ts.Diagnostics.Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity, symbolToString(target));
}
else {
var message_2 = target.flags & 2 || source.flags & 2
? ts.Diagnostics.Cannot_redeclare_block_scoped_variable_0 : ts.Diagnostics.Duplicate_identifier_0;
ts.forEach(source.declarations, function (node) {
error(ts.getNameOfDeclaration(node) || node, message_2, symbolToString(source));
});
ts.forEach(target.declarations, function (node) {
error(ts.getNameOfDeclaration(node) || node, message_2, symbolToString(source));
});
}
}
function mergeSymbolTable(target, source) {
source.forEach(function (sourceSymbol, id) {
var targetSymbol = target.get(id);
if (!targetSymbol) {
target.set(id, sourceSymbol);
}
else {
if (!(targetSymbol.flags & 33554432)) {
targetSymbol = cloneSymbol(targetSymbol);
target.set(id, targetSymbol);
}
mergeSymbol(targetSymbol, sourceSymbol);
}
});
}
function mergeModuleAugmentation(moduleName) {
var moduleAugmentation = moduleName.parent;
if (moduleAugmentation.symbol.declarations[0] !== moduleAugmentation) {
ts.Debug.assert(moduleAugmentation.symbol.declarations.length > 1);
return;
}
if (ts.isGlobalScopeAugmentation(moduleAugmentation)) {
mergeSymbolTable(globals, moduleAugmentation.symbol.exports);
}
else {
var moduleNotFoundError = !ts.isInAmbientContext(moduleName.parent.parent)
? ts.Diagnostics.Invalid_module_name_in_augmentation_module_0_cannot_be_found
: undefined;
var mainModule = resolveExternalModuleNameWorker(moduleName, moduleName, moduleNotFoundError, true);
if (!mainModule) {
return;
}
mainModule = resolveExternalModuleSymbol(mainModule);
if (mainModule.flags & 1920) {
mainModule = 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) {
source.forEach(function (sourceSymbol, id) {
var targetSymbol = target.get(id);
if (targetSymbol) {
ts.forEach(targetSymbol.declarations, addDeclarationDiagnostic(ts.unescapeLeadingUnderscores(id), message));
}
else {
target.set(id, sourceSymbol);
}
});
function addDeclarationDiagnostic(id, message) {
return function (declaration) { return diagnostics.add(ts.createDiagnosticForNode(declaration, message, id)); };
}
}
function getSymbolLinks(symbol) {
if (symbol.flags & 33554432)
return symbol;
var id = getSymbolId(symbol);
return symbolLinks[id] || (symbolLinks[id] = {});
}
function getNodeLinks(node) {
var nodeId = getNodeId(node);
return nodeLinks[nodeId] || (nodeLinks[nodeId] = { flags: 0 });
}
function getObjectFlags(type) {
return type.flags & 32768 ? type.objectFlags : 0;
}
function isGlobalSourceFile(node) {
return node.kind === 265 && !ts.isExternalOrCommonJsModule(node);
}
function getSymbol(symbols, name, meaning) {
if (meaning) {
var symbol = symbols.get(name);
if (symbol) {
ts.Debug.assert((ts.getCheckFlags(symbol) & 1) === 0, "Should never get an instantiated symbol here.");
if (symbol.flags & meaning) {
return symbol;
}
if (symbol.flags & 2097152) {
var target = resolveAlias(symbol);
if (target === unknownSymbol || target.flags & meaning) {
return symbol;
}
}
}
}
}
function getSymbolsOfParameterPropertyDeclaration(parameter, parameterName) {
var constructorDeclaration = parameter.parent;
var classDeclaration = parameter.parent.parent;
var parameterSymbol = getSymbol(constructorDeclaration.locals, parameterName, 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 && (declarationFile.externalModuleIndicator || useFile.externalModuleIndicator)) ||
(!compilerOptions.outFile && !compilerOptions.out) ||
isInTypeQuery(usage) ||
ts.isInAmbientContext(declaration)) {
return true;
}
if (isUsedInFunctionOrInstanceProperty(usage, declaration)) {
return true;
}
var sourceFiles = host.getSourceFiles();
return ts.indexOf(sourceFiles, declarationFile) <= ts.indexOf(sourceFiles, useFile);
}
if (declaration.pos <= usage.pos) {
if (declaration.kind === 176) {
var errorBindingElement = ts.getAncestor(usage, 176);
if (errorBindingElement) {
return ts.findAncestor(errorBindingElement, ts.isBindingElement) !== ts.findAncestor(declaration, ts.isBindingElement) ||
declaration.pos < errorBindingElement.pos;
}
return isBlockScopedNameDeclaredBeforeUse(ts.getAncestor(declaration, 226), usage);
}
else if (declaration.kind === 226) {
return !isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage);
}
return true;
}
if (usage.parent.kind === 246 || (usage.parent.kind === 243 && usage.parent.isExportEquals)) {
return true;
}
if (usage.kind === 243 && usage.isExportEquals) {
return true;
}
var container = ts.getEnclosingBlockScopeContainer(declaration);
return isInTypeQuery(usage) || isUsedInFunctionOrInstanceProperty(usage, declaration, container);
function isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage) {
var container = ts.getEnclosingBlockScopeContainer(declaration);
switch (declaration.parent.parent.kind) {
case 208:
case 214:
case 216:
if (isSameScopeDescendentOf(usage, declaration, container)) {
return true;
}
break;
}
return ts.isForInOrOfStatement(declaration.parent.parent) && isSameScopeDescendentOf(usage, declaration.parent.parent.expression, container);
}
function isUsedInFunctionOrInstanceProperty(usage, declaration, container) {
return !!ts.findAncestor(usage, function (current) {
if (current === container) {
return "quit";
}
if (ts.isFunctionLike(current)) {
return true;
}
var initializerOfProperty = current.parent &&
current.parent.kind === 149 &&
current.parent.initializer === current;
if (initializerOfProperty) {
if (ts.hasModifier(current.parent, 32)) {
if (declaration.kind === 151) {
return true;
}
}
else {
var isDeclarationInstanceProperty = declaration.kind === 149 && !ts.hasModifier(declaration, 32);
if (!isDeclarationInstanceProperty || ts.getContainingClass(usage) !== ts.getContainingClass(declaration)) {
return true;
}
}
}
});
}
}
function resolveName(location, name, meaning, nameNotFoundMessage, nameArg, isUse, suggestedNameNotFoundMessage) {
return resolveNameHelper(location, name, meaning, nameNotFoundMessage, nameArg, isUse, getSymbol, suggestedNameNotFoundMessage);
}
function resolveNameHelper(location, name, meaning, nameNotFoundMessage, nameArg, isUse, lookup, suggestedNameNotFoundMessage) {
var originalLocation = location;
var result;
var lastLocation;
var lastNonBlockLocation;
var propertyWithInvalidInitializer;
var errorLocation = location;
var grandparent;
var isInExternalModule = false;
loop: while (location) {
if (location.locals && !isGlobalSourceFile(location)) {
if (result = lookup(location.locals, name, meaning)) {
var useResult = true;
if (ts.isFunctionLike(location) && lastLocation && lastLocation !== location.body) {
if (meaning & result.flags & 793064 && lastLocation.kind !== 275) {
useResult = result.flags & 262144
? lastLocation === location.type ||
lastLocation.kind === 146 ||
lastLocation.kind === 145
: false;
}
if (meaning & 107455 && result.flags & 1) {
useResult =
lastLocation.kind === 146 ||
(lastLocation === location.type &&
result.valueDeclaration.kind === 146);
}
}
if (useResult) {
break loop;
}
else {
result = undefined;
}
}
}
switch (location.kind) {
case 265:
if (!ts.isExternalOrCommonJsModule(location))
break;
isInExternalModule = true;
case 233:
var moduleExports = getSymbolOfNode(location).exports;
if (location.kind === 265 || ts.isAmbientModule(location)) {
if (result = moduleExports.get("default")) {
var localSymbol = ts.getLocalSymbolForExportDefault(result);
if (localSymbol && (result.flags & meaning) && localSymbol.escapedName === name) {
break loop;
}
result = undefined;
}
var moduleExport = moduleExports.get(name);
if (moduleExport &&
moduleExport.flags === 2097152 &&
ts.getDeclarationOfKind(moduleExport, 246)) {
break;
}
}
if (result = lookup(moduleExports, name, meaning & 2623475)) {
break loop;
}
break;
case 232:
if (result = lookup(getSymbolOfNode(location).exports, name, meaning & 8)) {
break loop;
}
break;
case 149:
case 148:
if (ts.isClassLike(location.parent) && !ts.hasModifier(location, 32)) {
var ctor = findConstructorDeclaration(location.parent);
if (ctor && ctor.locals) {
if (lookup(ctor.locals, name, meaning & 107455)) {
propertyWithInvalidInitializer = location;
}
}
}
break;
case 229:
case 199:
case 230:
if (result = lookup(getSymbolOfNode(location).members, name, meaning & 793064)) {
if (!isTypeParameterSymbolDeclaredInContainer(result, location)) {
result = undefined;
break;
}
if (lastLocation && ts.hasModifier(lastLocation, 32)) {
error(errorLocation, ts.Diagnostics.Static_members_cannot_reference_class_type_parameters);
return undefined;
}
break loop;
}
if (location.kind === 199 && meaning & 32) {
var className = location.name;
if (className && name === className.escapedText) {
result = location.symbol;
break loop;
}
}
break;
case 201:
if (lastLocation === location.expression && location.parent.token === 85) {
var container = location.parent.parent;
if (ts.isClassLike(container) && (result = lookup(getSymbolOfNode(container).members, name, meaning & 793064))) {
if (nameNotFoundMessage) {
error(errorLocation, ts.Diagnostics.Base_class_expressions_cannot_reference_class_type_parameters);
}
return undefined;
}
}
break;
case 144:
grandparent = location.parent.parent;
if (ts.isClassLike(grandparent) || grandparent.kind === 230) {
if (result = lookup(getSymbolOfNode(grandparent).members, name, meaning & 793064)) {
error(errorLocation, ts.Diagnostics.A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type);
return undefined;
}
}
break;
case 151:
case 150:
case 152:
case 153:
case 154:
case 228:
case 187:
if (meaning & 3 && name === "arguments") {
result = argumentsSymbol;
break loop;
}
break;
case 186:
if (meaning & 3 && name === "arguments") {
result = argumentsSymbol;
break loop;
}
if (meaning & 16) {
var functionName = location.name;
if (functionName && name === functionName.escapedText) {
result = location.symbol;
break loop;
}
}
break;
case 147:
if (location.parent && location.parent.kind === 146) {
location = location.parent;
}
if (location.parent && ts.isClassElement(location.parent)) {
location = location.parent;
}
break;
}
if (location.kind !== 207) {
lastNonBlockLocation = location;
}
lastLocation = location;
location = location.parent;
}
if (isUse && result && nameNotFoundMessage && noUnusedIdentifiers && result !== lastNonBlockLocation.symbol) {
result.isReferenced = true;
}
if (!result) {
if (lastLocation) {
ts.Debug.assert(lastLocation.kind === 265);
if (lastLocation.commonJsModuleIndicator && name === "exports") {
return lastLocation.symbol;
}
}
result = lookup(globals, name, meaning);
}
if (!result) {
if (nameNotFoundMessage) {
if (!errorLocation ||
!checkAndReportErrorForMissingPrefix(errorLocation, name, nameArg) &&
!checkAndReportErrorForExtendingInterface(errorLocation) &&
!checkAndReportErrorForUsingTypeAsNamespace(errorLocation, name, meaning) &&
!checkAndReportErrorForUsingTypeAsValue(errorLocation, name, meaning) &&
!checkAndReportErrorForUsingNamespaceModuleAsValue(errorLocation, name, meaning)) {
var suggestion = void 0;
if (suggestedNameNotFoundMessage && suggestionCount < maximumSuggestionCount) {
suggestion = getSuggestionForNonexistentSymbol(originalLocation, name, meaning);
if (suggestion) {
error(errorLocation, suggestedNameNotFoundMessage, diagnosticName(nameArg), suggestion);
}
}
if (!suggestion) {
error(errorLocation, nameNotFoundMessage, diagnosticName(nameArg));
}
suggestionCount++;
}
}
return undefined;
}
if (nameNotFoundMessage) {
if (propertyWithInvalidInitializer) {
var propertyName = propertyWithInvalidInitializer.name;
error(errorLocation, ts.Diagnostics.Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor, ts.declarationNameToString(propertyName), diagnosticName(nameArg));
return undefined;
}
if (errorLocation &&
(meaning & 2 ||
((meaning & 32 || meaning & 384) && (meaning & 107455) === 107455))) {
var exportOrLocalSymbol = getExportSymbolOfValueSymbolIfExported(result);
if (exportOrLocalSymbol.flags & 2 || exportOrLocalSymbol.flags & 32 || exportOrLocalSymbol.flags & 384) {
checkResolvedBlockScopedVariable(exportOrLocalSymbol, errorLocation);
}
}
if (result && isInExternalModule && (meaning & 107455) === 107455) {
var decls = result.declarations;
if (decls && decls.length === 1 && decls[0].kind === 236) {
error(errorLocation, ts.Diagnostics._0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead, ts.unescapeLeadingUnderscores(name));
}
}
}
return result;
}
function diagnosticName(nameArg) {
return ts.isString(nameArg) ? ts.unescapeLeadingUnderscores(nameArg) : ts.declarationNameToString(nameArg);
}
function isTypeParameterSymbolDeclaredInContainer(symbol, container) {
for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
var decl = _a[_i];
if (decl.kind === 145 && decl.parent === container) {
return true;
}
}
return false;
}
function checkAndReportErrorForMissingPrefix(errorLocation, name, nameArg) {
if ((errorLocation.kind === 71 && (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, diagnosticName(nameArg), symbolToString(classSymbol));
return true;
}
if (location === container && !ts.hasModifier(location, 32)) {
var instanceType = getDeclaredTypeOfSymbol(classSymbol).thisType;
if (getPropertyOfType(instanceType, name)) {
error(errorLocation, ts.Diagnostics.Cannot_find_name_0_Did_you_mean_the_instance_member_this_0, diagnosticName(nameArg));
return true;
}
}
}
location = location.parent;
}
return false;
}
function checkAndReportErrorForExtendingInterface(errorLocation) {
var expression = getEntityNameForExtendingInterface(errorLocation);
var isError = !!(expression && resolveEntityName(expression, 64, true));
if (isError) {
error(errorLocation, ts.Diagnostics.Cannot_extend_an_interface_0_Did_you_mean_implements, ts.getTextOfNode(expression));
}
return isError;
}
function getEntityNameForExtendingInterface(node) {
switch (node.kind) {
case 71:
case 179:
return node.parent ? getEntityNameForExtendingInterface(node.parent) : undefined;
case 201:
if (ts.isEntityNameExpression(node.expression)) {
return node.expression;
}
default:
return undefined;
}
}
function checkAndReportErrorForUsingTypeAsNamespace(errorLocation, name, meaning) {
if (meaning === 1920) {
var symbol = resolveSymbol(resolveName(errorLocation, name, 793064 & ~107455, undefined, undefined, false));
var parent = errorLocation.parent;
if (symbol) {
if (ts.isQualifiedName(parent)) {
ts.Debug.assert(parent.left === errorLocation, "Should only be resolving left side of qualified name as a namespace");
var propName = parent.right.escapedText;
var propType = getPropertyOfType(getDeclaredTypeOfSymbol(symbol), propName);
if (propType) {
error(parent, ts.Diagnostics.Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_property_1_in_0_with_0_1, ts.unescapeLeadingUnderscores(name), ts.unescapeLeadingUnderscores(propName));
return true;
}
}
error(errorLocation, ts.Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here, ts.unescapeLeadingUnderscores(name));
return true;
}
}
return false;
}
function checkAndReportErrorForUsingTypeAsValue(errorLocation, name, meaning) {
if (meaning & (107455 & ~1024)) {
if (name === "any" || name === "string" || name === "number" || name === "boolean" || name === "never") {
error(errorLocation, ts.Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_value_here, ts.unescapeLeadingUnderscores(name));
return true;
}
var symbol = resolveSymbol(resolveName(errorLocation, name, 793064 & ~107455, undefined, undefined, false));
if (symbol && !(symbol.flags & 1024)) {
error(errorLocation, ts.Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_value_here, ts.unescapeLeadingUnderscores(name));
return true;
}
}
return false;
}
function checkAndReportErrorForUsingNamespaceModuleAsValue(errorLocation, name, meaning) {
if (meaning & (107455 & ~1024 & ~793064)) {
var symbol = resolveSymbol(resolveName(errorLocation, name, 1024 & ~107455, undefined, undefined, false));
if (symbol) {
error(errorLocation, ts.Diagnostics.Cannot_use_namespace_0_as_a_value, ts.unescapeLeadingUnderscores(name));
return true;
}
}
else if (meaning & (793064 & ~1024 & ~107455)) {
var symbol = resolveSymbol(resolveName(errorLocation, name, 1024 & ~793064, undefined, undefined, false));
if (symbol) {
error(errorLocation, ts.Diagnostics.Cannot_use_namespace_0_as_a_type, ts.unescapeLeadingUnderscores(name));
return true;
}
}
return false;
}
function checkResolvedBlockScopedVariable(result, errorLocation) {
ts.Debug.assert(!!(result.flags & 2 || result.flags & 32 || result.flags & 384));
var declaration = ts.forEach(result.declarations, function (d) { return ts.isBlockOrCatchScoped(d) || ts.isClassLike(d) || (d.kind === 232) ? d : undefined; });
ts.Debug.assert(declaration !== undefined, "Declaration to checkResolvedBlockScopedVariable is undefined");
if (!ts.isInAmbientContext(declaration) && !isBlockScopedNameDeclaredBeforeUse(declaration, errorLocation)) {
if (result.flags & 2) {
error(errorLocation, ts.Diagnostics.Block_scoped_variable_0_used_before_its_declaration, ts.declarationNameToString(ts.getNameOfDeclaration(declaration)));
}
else if (result.flags & 32) {
error(errorLocation, ts.Diagnostics.Class_0_used_before_its_declaration, ts.declarationNameToString(ts.getNameOfDeclaration(declaration)));
}
else if (result.flags & 256) {
error(errorLocation, ts.Diagnostics.Enum_0_used_before_its_declaration, ts.declarationNameToString(ts.getNameOfDeclaration(declaration)));
}
}
}
function isSameScopeDescendentOf(initial, parent, stopAt) {
return parent && !!ts.findAncestor(initial, function (n) { return n === stopAt || ts.isFunctionLike(n) ? "quit" : n === parent; });
}
function getAnyImportSyntax(node) {
switch (node.kind) {
case 237:
return node;
case 239:
return node.parent;
case 240:
return node.parent.parent;
case 242:
return node.parent.parent.parent;
default:
return undefined;
}
}
function getDeclarationOfAliasSymbol(symbol) {
return ts.find(symbol.declarations, ts.isAliasSymbolDeclaration);
}
function getTargetOfImportEqualsDeclaration(node, dontResolveAlias) {
if (node.moduleReference.kind === 248) {
return resolveExternalModuleSymbol(resolveExternalModuleName(node, ts.getExternalModuleImportEqualsDeclarationExpression(node)));
}
return getSymbolOfPartOfRightHandSideOfImportEquals(node.moduleReference, dontResolveAlias);
}
function getTargetOfImportClause(node, dontResolveAlias) {
var moduleSymbol = resolveExternalModuleName(node, node.parent.moduleSpecifier);
if (moduleSymbol) {
var exportDefaultSymbol = void 0;
if (ts.isShorthandAmbientModuleSymbol(moduleSymbol)) {
exportDefaultSymbol = moduleSymbol;
}
else {
var exportValue = moduleSymbol.exports.get("export=");
exportDefaultSymbol = exportValue
? getPropertyOfType(getTypeOfSymbol(exportValue), "default")
: resolveSymbol(moduleSymbol.exports.get("default"), dontResolveAlias);
}
if (!exportDefaultSymbol && !allowSyntheticDefaultImports) {
error(node.name, ts.Diagnostics.Module_0_has_no_default_export, symbolToString(moduleSymbol));
}
else if (!exportDefaultSymbol && allowSyntheticDefaultImports) {
return resolveExternalModuleSymbol(moduleSymbol, dontResolveAlias) || resolveSymbol(moduleSymbol, dontResolveAlias);
}
return exportDefaultSymbol;
}
}
function getTargetOfNamespaceImport(node, dontResolveAlias) {
var moduleSpecifier = node.parent.parent.moduleSpecifier;
return resolveESModuleSymbol(resolveExternalModuleName(node, moduleSpecifier), moduleSpecifier, dontResolveAlias);
}
function combineValueAndTypeSymbols(valueSymbol, typeSymbol) {
if (valueSymbol === unknownSymbol && typeSymbol === unknownSymbol) {
return unknownSymbol;
}
if (valueSymbol.flags & (793064 | 1920)) {
return valueSymbol;
}
var result = createSymbol(valueSymbol.flags | typeSymbol.flags, valueSymbol.escapedName);
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, dontResolveAlias) {
if (symbol.flags & 1536) {
return resolveSymbol(getExportsOfSymbol(symbol).get(name), dontResolveAlias);
}
}
function getPropertyOfVariable(symbol, name) {
if (symbol.flags & 3) {
var typeAnnotation = symbol.valueDeclaration.type;
if (typeAnnotation) {
return resolveSymbol(getPropertyOfType(getTypeFromTypeNode(typeAnnotation), name));
}
}
}
function getExternalModuleMember(node, specifier, dontResolveAlias) {
var moduleSymbol = resolveExternalModuleName(node, node.moduleSpecifier);
var targetSymbol = resolveESModuleSymbol(moduleSymbol, node.moduleSpecifier, dontResolveAlias);
if (targetSymbol) {
var name = specifier.propertyName || specifier.name;
if (name.escapedText) {
if (ts.isShorthandAmbientModuleSymbol(moduleSymbol)) {
return moduleSymbol;
}
var symbolFromVariable = void 0;
if (moduleSymbol && moduleSymbol.exports && moduleSymbol.exports.get("export=")) {
symbolFromVariable = getPropertyOfType(getTypeOfSymbol(targetSymbol), name.escapedText);
}
else {
symbolFromVariable = getPropertyOfVariable(targetSymbol, name.escapedText);
}
symbolFromVariable = resolveSymbol(symbolFromVariable, dontResolveAlias);
var symbolFromModule = getExportOfModule(targetSymbol, name.escapedText, dontResolveAlias);
if (!symbolFromModule && allowSyntheticDefaultImports && name.escapedText === "default") {
symbolFromModule = resolveExternalModuleSymbol(moduleSymbol, dontResolveAlias) || resolveSymbol(moduleSymbol, dontResolveAlias);
}
var symbol = symbolFromModule && symbolFromVariable ?
combineValueAndTypeSymbols(symbolFromVariable, symbolFromModule) :
symbolFromModule || symbolFromVariable;
if (!symbol) {
error(name, ts.Diagnostics.Module_0_has_no_exported_member_1, getFullyQualifiedName(moduleSymbol), ts.declarationNameToString(name));
}
return symbol;
}
}
}
function getTargetOfImportSpecifier(node, dontResolveAlias) {
return getExternalModuleMember(node.parent.parent.parent, node, dontResolveAlias);
}
function getTargetOfNamespaceExportDeclaration(node, dontResolveAlias) {
return resolveExternalModuleSymbol(node.parent.symbol, dontResolveAlias);
}
function getTargetOfExportSpecifier(node, meaning, dontResolveAlias) {
return node.parent.parent.moduleSpecifier ?
getExternalModuleMember(node.parent.parent, node, dontResolveAlias) :
resolveEntityName(node.propertyName || node.name, meaning, false, dontResolveAlias);
}
function getTargetOfExportAssignment(node, dontResolveAlias) {
return resolveEntityName(node.expression, 107455 | 793064 | 1920, false, dontResolveAlias);
}
function getTargetOfAliasDeclaration(node, dontRecursivelyResolve) {
switch (node.kind) {
case 237:
return getTargetOfImportEqualsDeclaration(node, dontRecursivelyResolve);
case 239:
return getTargetOfImportClause(node, dontRecursivelyResolve);
case 240:
return getTargetOfNamespaceImport(node, dontRecursivelyResolve);
case 242:
return getTargetOfImportSpecifier(node, dontRecursivelyResolve);
case 246:
return getTargetOfExportSpecifier(node, 107455 | 793064 | 1920, dontRecursivelyResolve);
case 243:
return getTargetOfExportAssignment(node, dontRecursivelyResolve);
case 236:
return getTargetOfNamespaceExportDeclaration(node, dontRecursivelyResolve);
}
}
function isNonLocalAlias(symbol, excludes) {
if (excludes === void 0) { excludes = 107455 | 793064 | 1920; }
return symbol && (symbol.flags & (2097152 | excludes)) === 2097152;
}
function resolveSymbol(symbol, dontResolveAlias) {
var shouldResolve = !dontResolveAlias && isNonLocalAlias(symbol);
return shouldResolve ? resolveAlias(symbol) : symbol;
}
function resolveAlias(symbol) {
ts.Debug.assert((symbol.flags & 2097152) !== 0, "Should only get Alias here.");
var links = getSymbolLinks(symbol);
if (!links.target) {
links.target = resolvingSymbol;
var node = getDeclarationOfAliasSymbol(symbol);
ts.Debug.assert(!!node);
var target = getTargetOfAliasDeclaration(node);
if (links.target === resolvingSymbol) {
links.target = target || unknownSymbol;
}
else {
error(node, ts.Diagnostics.Circular_definition_of_import_alias_0, symbolToString(symbol));
}
}
else if (links.target === resolvingSymbol) {
links.target = unknownSymbol;
}
return links.target;
}
function markExportAsReferenced(node) {
var symbol = getSymbolOfNode(node);
var target = resolveAlias(symbol);
if (target) {
var markAlias = target === unknownSymbol ||
((target.flags & 107455) && !isConstEnumOrConstEnumOnlyModule(target));
if (markAlias) {
markAliasSymbolAsReferenced(symbol);
}
}
}
function markAliasSymbolAsReferenced(symbol) {
var links = getSymbolLinks(symbol);
if (!links.referenced) {
links.referenced = true;
var node = getDeclarationOfAliasSymbol(symbol);
ts.Debug.assert(!!node);
if (node.kind === 243) {
checkExpressionCached(node.expression);
}
else if (node.kind === 246) {
checkExpressionCached(node.propertyName || node.name);
}
else if (ts.isInternalModuleImportEqualsDeclaration(node)) {
checkExpressionCached(node.moduleReference);
}
}
}
function getSymbolOfPartOfRightHandSideOfImportEquals(entityName, dontResolveAlias) {
if (entityName.kind === 71 && ts.isRightSideOfQualifiedNameOrPropertyAccess(entityName)) {
entityName = entityName.parent;
}
if (entityName.kind === 71 || entityName.parent.kind === 143) {
return resolveEntityName(entityName, 1920, false, dontResolveAlias);
}
else {
ts.Debug.assert(entityName.parent.kind === 237);
return resolveEntityName(entityName, 107455 | 793064 | 1920, false, dontResolveAlias);
}
}
function getFullyQualifiedName(symbol) {
return symbol.parent ? getFullyQualifiedName(symbol.parent) + "." + symbolToString(symbol) : symbolToString(symbol);
}
function resolveEntityName(name, meaning, ignoreErrors, dontResolveAlias, location) {
if (ts.nodeIsMissing(name)) {
return undefined;
}
var symbol;
if (name.kind === 71) {
var message = meaning === 1920 ? ts.Diagnostics.Cannot_find_namespace_0 : ts.Diagnostics.Cannot_find_name_0;
symbol = resolveName(location || name, name.escapedText, meaning, ignoreErrors ? undefined : message, name, true);
if (!symbol) {
return undefined;
}
}
else if (name.kind === 143 || name.kind === 179) {
var left = void 0;
if (name.kind === 143) {
left = name.left;
}
else if (name.kind === 179 &&
(name.expression.kind === 185 || ts.isEntityNameExpression(name.expression))) {
left = name.expression;
}
else {
return undefined;
}
var right = name.kind === 143 ? name.right : name.name;
var namespace = resolveEntityName(left, 1920, ignoreErrors, false, location);
if (!namespace || ts.nodeIsMissing(right)) {
return undefined;
}
else if (namespace === unknownSymbol) {
return namespace;
}
symbol = getSymbol(getExportsOfSymbol(namespace), right.escapedText, meaning);
if (!symbol) {
if (!ignoreErrors) {
error(right, ts.Diagnostics.Namespace_0_has_no_exported_member_1, getFullyQualifiedName(namespace), ts.declarationNameToString(right));
}
return undefined;
}
}
else if (name.kind === 185) {
return ts.isEntityNameExpression(name.expression) ?
resolveEntityName(name.expression, meaning, ignoreErrors, dontResolveAlias, location) :
undefined;
}
else {
ts.Debug.assertNever(name, "Unknown entity name kind.");
}
ts.Debug.assert((ts.getCheckFlags(symbol) & 1) === 0, "Should never get an instantiated symbol here.");
return (symbol.flags & meaning) || dontResolveAlias ? symbol : resolveAlias(symbol);
}
function resolveExternalModuleName(location, moduleReferenceExpression) {
return resolveExternalModuleNameWorker(location, moduleReferenceExpression, ts.Diagnostics.Cannot_find_module_0);
}
function resolveExternalModuleNameWorker(location, moduleReferenceExpression, moduleNotFoundError, isForAugmentation) {
if (isForAugmentation === void 0) { isForAugmentation = false; }
if (moduleReferenceExpression.kind !== 9 && moduleReferenceExpression.kind !== 13) {
return;
}
var moduleReferenceLiteral = moduleReferenceExpression;
return resolveExternalModule(location, moduleReferenceLiteral.text, moduleNotFoundError, moduleReferenceLiteral, isForAugmentation);
}
function resolveExternalModule(location, moduleReference, moduleNotFoundError, errorNode, isForAugmentation) {
if (isForAugmentation === void 0) { isForAugmentation = false; }
if (moduleReference === undefined) {
return;
}
if (ts.startsWith(moduleReference, "@types/")) {
var diag = ts.Diagnostics.Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1;
var withoutAtTypePrefix = ts.removePrefix(moduleReference, "@types/");
error(errorNode, diag, withoutAtTypePrefix, moduleReference);
}
var ambientModule = tryFindAmbientModule(moduleReference, true);
if (ambientModule) {
return ambientModule;
}
var resolvedModule = ts.getResolvedModule(ts.getSourceFileOfNode(location), moduleReference);
var resolutionDiagnostic = resolvedModule && ts.getResolutionDiagnostic(compilerOptions, resolvedModule);
var sourceFile = resolvedModule && !resolutionDiagnostic && host.getSourceFile(resolvedModule.resolvedFileName);
if (sourceFile) {
if (sourceFile.symbol) {
return getMergedSymbol(sourceFile.symbol);
}
if (moduleNotFoundError) {
error(errorNode, ts.Diagnostics.File_0_is_not_a_module, sourceFile.fileName);
}
return undefined;
}
if (patternAmbientModules) {
var pattern = ts.findBestPatternMatch(patternAmbientModules, function (_) { return _.pattern; }, moduleReference);
if (pattern) {
return getMergedSymbol(pattern.symbol);
}
}
if (resolvedModule && !ts.extensionIsTypeScript(resolvedModule.extension) && resolutionDiagnostic === undefined || resolutionDiagnostic === ts.Diagnostics.Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type) {
if (isForAugmentation) {
var diag = ts.Diagnostics.Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augmented;
error(errorNode, diag, moduleReference, resolvedModule.resolvedFileName);
}
else if (noImplicitAny && moduleNotFoundError) {
var errorInfo = !resolvedModule.isExternalLibraryImport ? undefined : ts.chainDiagnosticMessages(undefined, ts.Diagnostics.Try_npm_install_types_Slash_0_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare_module_0, moduleReference);
errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type, moduleReference, resolvedModule.resolvedFileName);
diagnostics.add(ts.createDiagnosticForNodeFromMessageChain(errorNode, errorInfo));
}
return undefined;
}
if (moduleNotFoundError) {
if (resolutionDiagnostic) {
error(errorNode, resolutionDiagnostic, moduleReference, resolvedModule.resolvedFileName);
}
else {
var tsExtension = ts.tryExtractTypeScriptExtension(moduleReference);
if (tsExtension) {
var diag = ts.Diagnostics.An_import_path_cannot_end_with_a_0_extension_Consider_importing_1_instead;
error(errorNode, diag, tsExtension, ts.removeExtension(moduleReference, tsExtension));
}
else {
error(errorNode, moduleNotFoundError, moduleReference);
}
}
}
return undefined;
}
function resolveExternalModuleSymbol(moduleSymbol, dontResolveAlias) {
return moduleSymbol && getMergedSymbol(resolveSymbol(moduleSymbol.exports.get("export="), dontResolveAlias)) || moduleSymbol;
}
function resolveESModuleSymbol(moduleSymbol, moduleReferenceExpression, dontResolveAlias) {
var symbol = resolveExternalModuleSymbol(moduleSymbol, dontResolveAlias);
if (!dontResolveAlias && 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));
}
return symbol;
}
function hasExportAssignmentSymbol(moduleSymbol) {
return moduleSymbol.exports.get("export=") !== undefined;
}
function getExportsOfModuleAsArray(moduleSymbol) {
return symbolsToArray(getExportsOfModule(moduleSymbol));
}
function getExportsAndPropertiesOfModule(moduleSymbol) {
var exports = getExportsOfModuleAsArray(moduleSymbol);
var exportEquals = resolveExternalModuleSymbol(moduleSymbol);
if (exportEquals !== moduleSymbol) {
ts.addRange(exports, getPropertiesOfType(getTypeOfSymbol(exportEquals)));
}
return exports;
}
function tryGetMemberInModuleExports(memberName, moduleSymbol) {
var symbolTable = getExportsOfModule(moduleSymbol);
if (symbolTable) {
return symbolTable.get(memberName);
}
}
function tryGetMemberInModuleExportsAndProperties(memberName, moduleSymbol) {
var symbol = tryGetMemberInModuleExports(memberName, moduleSymbol);
if (!symbol) {
var exportEquals = resolveExternalModuleSymbol(moduleSymbol);
if (exportEquals !== moduleSymbol) {
return getPropertyOfType(getTypeOfSymbol(exportEquals), memberName);
}
}
return symbol;
}
function getExportsOfSymbol(symbol) {
return symbol.flags & 1536 ? getExportsOfModule(symbol) : symbol.exports || emptySymbols;
}
function getExportsOfModule(moduleSymbol) {
var links = getSymbolLinks(moduleSymbol);
return links.resolvedExports || (links.resolvedExports = getExportsOfModuleWorker(moduleSymbol));
}
function extendExportSymbols(target, source, lookupTable, exportNode) {
source && source.forEach(function (sourceSymbol, id) {
if (id === "default")
return;
var targetSymbol = target.get(id);
if (!targetSymbol) {
target.set(id, sourceSymbol);
if (lookupTable && exportNode) {
lookupTable.set(id, {
specifierText: ts.getTextOfNode(exportNode.moduleSpecifier)
});
}
}
else if (lookupTable && exportNode && targetSymbol && resolveSymbol(targetSymbol) !== resolveSymbol(sourceSymbol)) {
var collisionTracker = lookupTable.get(id);
if (!collisionTracker.exportsWithDuplicate) {
collisionTracker.exportsWithDuplicate = [exportNode];
}
else {
collisionTracker.exportsWithDuplicate.push(exportNode);
}
}
});
}
function getExportsOfModuleWorker(moduleSymbol) {
var visitedSymbols = [];
moduleSymbol = resolveExternalModuleSymbol(moduleSymbol);
return visit(moduleSymbol) || emptySymbols;
function visit(symbol) {
if (!(symbol && symbol.flags & 1952 && ts.pushIfUnique(visitedSymbols, symbol))) {
return;
}
var symbols = ts.cloneMap(symbol.exports);
var exportStars = symbol.exports.get("__export");
if (exportStars) {
var nestedSymbols = ts.createSymbolTable();
var lookupTable_1 = ts.createMap();
for (var _i = 0, _a = exportStars.declarations; _i < _a.length; _i++) {
var node = _a[_i];
var resolvedModule = resolveExternalModuleName(node, node.moduleSpecifier);
var exportedSymbols = visit(resolvedModule);
extendExportSymbols(nestedSymbols, exportedSymbols, lookupTable_1, node);
}
lookupTable_1.forEach(function (_a, id) {
var exportsWithDuplicate = _a.exportsWithDuplicate;
if (id === "export=" || !(exportsWithDuplicate && exportsWithDuplicate.length) || symbols.has(id)) {
return;
}
for (var _i = 0, exportsWithDuplicate_1 = exportsWithDuplicate; _i < exportsWithDuplicate_1.length; _i++) {
var node = exportsWithDuplicate_1[_i];
diagnostics.add(ts.createDiagnosticForNode(node, ts.Diagnostics.Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambiguity, lookupTable_1.get(id).specifierText, ts.unescapeLeadingUnderscores(id)));
}
});
extendExportSymbols(symbols, nestedSymbols);
}
return symbols;
}
}
function getMergedSymbol(symbol) {
var merged;
return symbol && symbol.mergeId && (merged = mergedSymbols[symbol.mergeId]) ? merged : symbol;
}
function getSymbolOfNode(node) {
return getMergedSymbol(node.symbol);
}
function getParentOfSymbol(symbol) {
return getMergedSymbol(symbol.parent);
}
function getExportSymbolOfValueSymbolIfExported(symbol) {
return symbol && (symbol.flags & 1048576) !== 0
? getMergedSymbol(symbol.exportSymbol)
: symbol;
}
function symbolIsValue(symbol) {
return !!(symbol.flags & 107455 || symbol.flags & 2097152 && resolveAlias(symbol).flags & 107455);
}
function findConstructorDeclaration(node) {
var members = node.members;
for (var _i = 0, members_2 = members; _i < members_2.length; _i++) {
var member = members_2[_i];
if (member.kind === 152 && ts.nodeIsPresent(member.body)) {
return member;
}
}
}
function createType(flags) {
var result = new Type(checker, flags);
typeCount++;
result.id = typeCount;
return result;
}
function createIntrinsicType(kind, intrinsicName) {
var type = createType(kind);
type.intrinsicName = intrinsicName;
return type;
}
function createBooleanType(trueFalseTypes) {
var type = getUnionType(trueFalseTypes);
type.flags |= 8;
type.intrinsicName = "boolean";
return type;
}
function createObjectType(objectFlags, symbol) {
var type = createType(32768);
type.objectFlags = objectFlags;
type.symbol = symbol;
return type;
}
function createTypeofType() {
return getUnionType(ts.arrayFrom(typeofEQFacts.keys(), getLiteralType));
}
function isReservedMemberName(name) {
return name.charCodeAt(0) === 95 &&
name.charCodeAt(1) === 95 &&
name.charCodeAt(2) !== 95 &&
name.charCodeAt(2) !== 64;
}
function getNamedMembers(members) {
var result;
members.forEach(function (symbol, id) {
if (!isReservedMemberName(id)) {
if (!result)
result = [];
if (symbolIsValue(symbol)) {
result.push(symbol);
}
}
});
return result || ts.emptyArray;
}
function setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo) {
type.members = members;
type.properties = getNamedMembers(members);
type.callSignatures = callSignatures;
type.constructSignatures = constructSignatures;
if (stringIndexInfo)
type.stringIndexInfo = stringIndexInfo;
if (numberIndexInfo)
type.numberIndexInfo = numberIndexInfo;
return type;
}
function createAnonymousType(symbol, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo) {
return setStructuredTypeMembers(createObjectType(16, symbol), members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
}
function forEachSymbolTableInScope(enclosingDeclaration, callback) {
var result;
for (var location = enclosingDeclaration; location; location = location.parent) {
if (location.locals && !isGlobalSourceFile(location)) {
if (result = callback(location.locals)) {
return result;
}
}
switch (location.kind) {
case 265:
if (!ts.isExternalOrCommonJsModule(location)) {
break;
}
case 233:
if (result = callback(getSymbolOfNode(location).exports)) {
return result;
}
break;
}
}
return callback(globals);
}
function getQualifiedLeftMeaning(rightMeaning) {
return rightMeaning === 107455 ? 107455 : 1920;
}
function getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning, useOnlyExternalAliasing) {
if (!(symbol && !isPropertyOrMethodDeclarationSymbol(symbol))) {
return undefined;
}
var visitedSymbolTables = [];
return forEachSymbolTableInScope(enclosingDeclaration, getAccessibleSymbolChainFromSymbolTable);
function getAccessibleSymbolChainFromSymbolTable(symbols) {
if (!ts.pushIfUnique(visitedSymbolTables, symbols)) {
return undefined;
}
var result = trySymbolTable(symbols);
visitedSymbolTables.pop();
return result;
}
function canQualifySymbol(symbolFromSymbolTable, meaning) {
return !needsQualification(symbolFromSymbolTable, enclosingDeclaration, meaning) ||
!!getAccessibleSymbolChain(symbolFromSymbolTable.parent, enclosingDeclaration, getQualifiedLeftMeaning(meaning), useOnlyExternalAliasing);
}
function isAccessible(symbolFromSymbolTable, resolvedAliasSymbol) {
return symbol === (resolvedAliasSymbol || symbolFromSymbolTable) &&
!ts.some(symbolFromSymbolTable.declarations, hasExternalModuleSymbol) &&
canQualifySymbol(symbolFromSymbolTable, meaning);
}
function isUMDExportSymbol(symbol) {
return symbol && symbol.declarations && symbol.declarations[0] && ts.isNamespaceExportDeclaration(symbol.declarations[0]);
}
function trySymbolTable(symbols) {
if (isAccessible(symbols.get(symbol.escapedName))) {
return [symbol];
}
return ts.forEachEntry(symbols, function (symbolFromSymbolTable) {
if (symbolFromSymbolTable.flags & 2097152
&& symbolFromSymbolTable.escapedName !== "export="
&& !ts.getDeclarationOfKind(symbolFromSymbolTable, 246)
&& !(isUMDExportSymbol(symbolFromSymbolTable) && enclosingDeclaration && ts.isExternalModule(ts.getSourceFileOfNode(enclosingDeclaration)))
&& (!useOnlyExternalAliasing || ts.some(symbolFromSymbolTable.declarations, ts.isExternalModuleImportEqualsDeclaration))) {
var resolvedImportedSymbol = resolveAlias(symbolFromSymbolTable);
if (isAccessible(symbolFromSymbolTable, resolvedImportedSymbol)) {
return [symbolFromSymbolTable];
}
var accessibleSymbolsFromExports = resolvedImportedSymbol.exports ? getAccessibleSymbolChainFromSymbolTable(resolvedImportedSymbol.exports) : undefined;
if (accessibleSymbolsFromExports && canQualifySymbol(symbolFromSymbolTable, getQualifiedLeftMeaning(meaning))) {
return [symbolFromSymbolTable].concat(accessibleSymbolsFromExports);
}
}
});
}
}
function needsQualification(symbol, enclosingDeclaration, meaning) {
var qualify = false;
forEachSymbolTableInScope(enclosingDeclaration, function (symbolTable) {
var symbolFromSymbolTable = symbolTable.get(symbol.escapedName);
if (!symbolFromSymbolTable) {
return false;
}
if (symbolFromSymbolTable === symbol) {
return true;
}
symbolFromSymbolTable = (symbolFromSymbolTable.flags & 2097152 && !ts.getDeclarationOfKind(symbolFromSymbolTable, 246)) ? 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 149:
case 151:
case 153:
case 154:
continue;
default:
return false;
}
}
return true;
}
return false;
}
function isTypeSymbolAccessible(typeSymbol, enclosingDeclaration) {
var access = isSymbolAccessible(typeSymbol, enclosingDeclaration, 793064, false);
return access.accessibility === 0;
}
function isSymbolAccessible(symbol, enclosingDeclaration, meaning, shouldComputeAliasesToMakeVisible) {
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], shouldComputeAliasesToMakeVisible);
if (!hasAccessibleDeclarations) {
return {
accessibility: 1,
errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning),
errorModuleName: symbol !== initialSymbol ? symbolToString(symbol, enclosingDeclaration, 1920) : 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) {
var node = ts.findAncestor(declaration, hasExternalModuleSymbol);
return node && getSymbolOfNode(node);
}
}
function hasExternalModuleSymbol(declaration) {
return ts.isAmbientModule(declaration) || (declaration.kind === 265 && ts.isExternalOrCommonJsModule(declaration));
}
function hasVisibleDeclarations(symbol, shouldComputeAliasToMakeVisible) {
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 &&
!ts.hasModifier(anyImportSyntax, 1) &&
isDeclarationVisible(anyImportSyntax.parent)) {
if (shouldComputeAliasToMakeVisible) {
getNodeLinks(declaration).isVisible = true;
aliasesToMakeVisible = ts.appendIfUnique(aliasesToMakeVisible, anyImportSyntax);
}
return true;
}
return false;
}
return true;
}
}
function isEntityNameVisible(entityName, enclosingDeclaration) {
var meaning;
if (entityName.parent.kind === 162 || ts.isExpressionWithTypeArgumentsInClassExtendsClause(entityName.parent)) {
meaning = 107455 | 1048576;
}
else if (entityName.kind === 143 || entityName.kind === 179 ||
entityName.parent.kind === 237) {
meaning = 1920;
}
else {
meaning = 793064;
}
var firstIdentifier = getFirstIdentifier(entityName);
var symbol = resolveName(enclosingDeclaration, firstIdentifier.escapedText, meaning, undefined, undefined, false);
return (symbol && hasVisibleDeclarations(symbol, true)) || {
accessibility: 1,
errorSymbolName: ts.getTextOfNode(firstIdentifier),
errorNode: firstIdentifier
};
}
function 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) {
return ts.usingSingleLineStringWriter(function (writer) {
getSymbolDisplayBuilder().buildSymbolDisplay(symbol, writer, enclosingDeclaration, meaning);
});
}
function signatureToString(signature, enclosingDeclaration, flags, kind) {
return ts.usingSingleLineStringWriter(function (writer) {
getSymbolDisplayBuilder().buildSignatureDisplay(signature, writer, enclosingDeclaration, flags, kind);
});
}
function typeToString(type, enclosingDeclaration, flags) {
var typeNode = nodeBuilder.typeToTypeNode(type, enclosingDeclaration, toNodeBuilderFlags(flags) | ts.NodeBuilderFlags.IgnoreErrors | ts.NodeBuilderFlags.WriteTypeParametersInQualifiedName);
ts.Debug.assert(typeNode !== undefined, "should always get typenode");
var options = { removeComments: true };
var writer = ts.createTextWriter("");
var printer = ts.createPrinter(options);
var sourceFile = enclosingDeclaration && ts.getSourceFileOfNode(enclosingDeclaration);
printer.writeNode(4, typeNode, sourceFile, writer);
var result = writer.getText();
var maxLength = compilerOptions.noErrorTruncation || flags & 8 ? undefined : 100;
if (maxLength && result.length >= maxLength) {
return result.substr(0, maxLength - "...".length) + "...";
}
return result;
function toNodeBuilderFlags(flags) {
var result = ts.NodeBuilderFlags.None;
if (!flags) {
return result;
}
if (flags & 8) {
result |= ts.NodeBuilderFlags.NoTruncation;
}
if (flags & 256) {
result |= ts.NodeBuilderFlags.UseFullyQualifiedType;
}
if (flags & 4096) {
result |= ts.NodeBuilderFlags.SuppressAnyReturnType;
}
if (flags & 1) {
result |= ts.NodeBuilderFlags.WriteArrayAsGenericType;
}
if (flags & 64) {
result |= ts.NodeBuilderFlags.WriteTypeArgumentsOfSignature;
}
return result;
}
}
function createNodeBuilder() {
return {
typeToTypeNode: function (type, enclosingDeclaration, flags) {
var context = createNodeBuilderContext(enclosingDeclaration, flags);
var resultingNode = typeToTypeNodeHelper(type, context);
var result = context.encounteredError ? undefined : resultingNode;
return result;
},
indexInfoToIndexSignatureDeclaration: function (indexInfo, kind, enclosingDeclaration, flags) {
var context = createNodeBuilderContext(enclosingDeclaration, flags);
var resultingNode = indexInfoToIndexSignatureDeclarationHelper(indexInfo, kind, context);
var result = context.encounteredError ? undefined : resultingNode;
return result;
},
signatureToSignatureDeclaration: function (signature, kind, enclosingDeclaration, flags) {
var context = createNodeBuilderContext(enclosingDeclaration, flags);
var resultingNode = signatureToSignatureDeclarationHelper(signature, kind, context);
var result = context.encounteredError ? undefined : resultingNode;
return result;
}
};
function createNodeBuilderContext(enclosingDeclaration, flags) {
return {
enclosingDeclaration: enclosingDeclaration,
flags: flags,
encounteredError: false,
symbolStack: undefined
};
}
function typeToTypeNodeHelper(type, context) {
var inTypeAlias = context.flags & ts.NodeBuilderFlags.InTypeAlias;
context.flags &= ~ts.NodeBuilderFlags.InTypeAlias;
if (!type) {
context.encounteredError = true;
return undefined;
}
if (type.flags & 1) {
return ts.createKeywordTypeNode(119);
}
if (type.flags & 2) {
return ts.createKeywordTypeNode(136);
}
if (type.flags & 4) {
return ts.createKeywordTypeNode(133);
}
if (type.flags & 8) {
return ts.createKeywordTypeNode(122);
}
if (type.flags & 256 && !(type.flags & 65536)) {
var parentSymbol = getParentOfSymbol(type.symbol);
var parentName = symbolToName(parentSymbol, context, 793064, false);
var enumLiteralName = getDeclaredTypeOfSymbol(parentSymbol) === type ? parentName : ts.createQualifiedName(parentName, getNameOfSymbol(type.symbol, context));
return ts.createTypeReferenceNode(enumLiteralName, undefined);
}
if (type.flags & 272) {
var name = symbolToName(type.symbol, context, 793064, false);
return ts.createTypeReferenceNode(name, undefined);
}
if (type.flags & (32)) {
return ts.createLiteralTypeNode(ts.setEmitFlags(ts.createLiteral(type.value), 16777216));
}
if (type.flags & (64)) {
return ts.createLiteralTypeNode((ts.createLiteral(type.value)));
}
if (type.flags & 128) {
return type.intrinsicName === "true" ? ts.createTrue() : ts.createFalse();
}
if (type.flags & 1024) {
return ts.createKeywordTypeNode(105);
}
if (type.flags & 2048) {
return ts.createKeywordTypeNode(139);
}
if (type.flags & 4096) {
return ts.createKeywordTypeNode(95);
}
if (type.flags & 8192) {
return ts.createKeywordTypeNode(130);
}
if (type.flags & 512) {
return ts.createKeywordTypeNode(137);
}
if (type.flags & 16777216) {
return ts.createKeywordTypeNode(134);
}
if (type.flags & 16384 && type.isThisType) {
if (context.flags & ts.NodeBuilderFlags.InObjectTypeLiteral) {
if (!context.encounteredError && !(context.flags & ts.NodeBuilderFlags.AllowThisInObjectLiteral)) {
context.encounteredError = true;
}
}
return ts.createThis();
}
var objectFlags = getObjectFlags(type);
if (objectFlags & 4) {
ts.Debug.assert(!!(type.flags & 32768));
return typeReferenceToTypeNode(type);
}
if (type.flags & 16384 || objectFlags & 3) {
var name = type.symbol ? symbolToName(type.symbol, context, 793064, false) : ts.createIdentifier("?");
return ts.createTypeReferenceNode(name, undefined);
}
if (!inTypeAlias && type.aliasSymbol && isTypeSymbolAccessible(type.aliasSymbol, context.enclosingDeclaration)) {
var name = symbolToTypeReferenceName(type.aliasSymbol);
var typeArgumentNodes = mapToTypeNodes(type.aliasTypeArguments, context);
return ts.createTypeReferenceNode(name, typeArgumentNodes);
}
if (type.flags & (65536 | 131072)) {
var types = type.flags & 65536 ? formatUnionTypes(type.types) : type.types;
var typeNodes = mapToTypeNodes(types, context);
if (typeNodes && typeNodes.length > 0) {
var unionOrIntersectionTypeNode = ts.createUnionOrIntersectionTypeNode(type.flags & 65536 ? 166 : 167, typeNodes);
return unionOrIntersectionTypeNode;
}
else {
if (!context.encounteredError && !(context.flags & ts.NodeBuilderFlags.AllowEmptyUnionOrIntersection)) {
context.encounteredError = true;
}
return undefined;
}
}
if (objectFlags & (16 | 32)) {
ts.Debug.assert(!!(type.flags & 32768));
return createAnonymousTypeNode(type);
}
if (type.flags & 262144) {
var indexedType = type.type;
var indexTypeNode = typeToTypeNodeHelper(indexedType, context);
return ts.createTypeOperatorNode(indexTypeNode);
}
if (type.flags & 524288) {
var objectTypeNode = typeToTypeNodeHelper(type.objectType, context);
var indexTypeNode = typeToTypeNodeHelper(type.indexType, context);
return ts.createIndexedAccessTypeNode(objectTypeNode, indexTypeNode);
}
ts.Debug.fail("Should be unreachable.");
function createMappedTypeNodeFromType(type) {
ts.Debug.assert(!!(type.flags & 32768));
var readonlyToken = type.declaration && type.declaration.readonlyToken ? ts.createToken(131) : undefined;
var questionToken = type.declaration && type.declaration.questionToken ? ts.createToken(55) : undefined;
var typeParameterNode = typeParameterToDeclaration(getTypeParameterFromMappedType(type), context);
var templateTypeNode = typeToTypeNodeHelper(getTemplateTypeFromMappedType(type), context);
var mappedTypeNode = ts.createMappedTypeNode(readonlyToken, typeParameterNode, questionToken, templateTypeNode);
return ts.setEmitFlags(mappedTypeNode, 1);
}
function createAnonymousTypeNode(type) {
var symbol = type.symbol;
if (symbol) {
if (symbol.flags & 32 && !getBaseTypeVariableOfClass(symbol) ||
symbol.flags & (384 | 512) ||
shouldWriteTypeOfFunctionSymbol()) {
return createTypeQueryNodeFromSymbol(symbol, 107455);
}
else if (ts.contains(context.symbolStack, symbol)) {
var typeAlias = getTypeAliasForTypeLiteral(type);
if (typeAlias) {
var entityName = symbolToName(typeAlias, context, 793064, false);
return ts.createTypeReferenceNode(entityName, undefined);
}
else {
return ts.createKeywordTypeNode(119);
}
}
else {
if (!context.symbolStack) {
context.symbolStack = [];
}
context.symbolStack.push(symbol);
var result = createTypeNodeFromObjectType(type);
context.symbolStack.pop();
return result;
}
}
else {
return createTypeNodeFromObjectType(type);
}
function shouldWriteTypeOfFunctionSymbol() {
var isStaticMethodSymbol = !!(symbol.flags & 8192) &&
ts.some(symbol.declarations, function (declaration) { return ts.hasModifier(declaration, 32); });
var isNonLocalFunctionSymbol = !!(symbol.flags & 16) &&
(symbol.parent ||
ts.forEach(symbol.declarations, function (declaration) {
return declaration.parent.kind === 265 || declaration.parent.kind === 234;
}));
if (isStaticMethodSymbol || isNonLocalFunctionSymbol) {
return ts.contains(context.symbolStack, symbol);
}
}
}
function createTypeNodeFromObjectType(type) {
if (isGenericMappedType(type)) {
return createMappedTypeNodeFromType(type);
}
var resolved = resolveStructuredTypeMembers(type);
if (!resolved.properties.length && !resolved.stringIndexInfo && !resolved.numberIndexInfo) {
if (!resolved.callSignatures.length && !resolved.constructSignatures.length) {
return ts.setEmitFlags(ts.createTypeLiteralNode(undefined), 1);
}
if (resolved.callSignatures.length === 1 && !resolved.constructSignatures.length) {
var signature = resolved.callSignatures[0];
var signatureNode = signatureToSignatureDeclarationHelper(signature, 160, context);
return signatureNode;
}
if (resolved.constructSignatures.length === 1 && !resolved.callSignatures.length) {
var signature = resolved.constructSignatures[0];
var signatureNode = signatureToSignatureDeclarationHelper(signature, 161, context);
return signatureNode;
}
}
var savedFlags = context.flags;
context.flags |= ts.NodeBuilderFlags.InObjectTypeLiteral;
var members = createTypeNodesFromResolvedType(resolved);
context.flags = savedFlags;
var typeLiteralNode = ts.createTypeLiteralNode(members);
return ts.setEmitFlags(typeLiteralNode, 1);
}
function createTypeQueryNodeFromSymbol(symbol, symbolFlags) {
var entityName = symbolToName(symbol, context, symbolFlags, false);
return ts.createTypeQueryNode(entityName);
}
function symbolToTypeReferenceName(symbol) {
var entityName = symbol.flags & 32 || !isReservedMemberName(symbol.escapedName) ? symbolToName(symbol, context, 793064, false) : ts.createIdentifier("");
return entityName;
}
function typeReferenceToTypeNode(type) {
var typeArguments = type.typeArguments || ts.emptyArray;
if (type.target === globalArrayType) {
if (context.flags & ts.NodeBuilderFlags.WriteArrayAsGenericType) {
var typeArgumentNode = typeToTypeNodeHelper(typeArguments[0], context);
return ts.createTypeReferenceNode("Array", [typeArgumentNode]);
}
var elementType = typeToTypeNodeHelper(typeArguments[0], context);
return ts.createArrayTypeNode(elementType);
}
else if (type.target.objectFlags & 8) {
if (typeArguments.length > 0) {
var tupleConstituentNodes = mapToTypeNodes(typeArguments.slice(0, getTypeReferenceArity(type)), context);
if (tupleConstituentNodes && tupleConstituentNodes.length > 0) {
return ts.createTupleTypeNode(tupleConstituentNodes);
}
}
if (context.encounteredError || (context.flags & ts.NodeBuilderFlags.AllowEmptyTuple)) {
return ts.createTupleTypeNode([]);
}
context.encounteredError = true;
return undefined;
}
else {
var outerTypeParameters = type.target.outerTypeParameters;
var i = 0;
var qualifiedName = void 0;
if (outerTypeParameters) {
var length_1 = outerTypeParameters.length;
while (i < length_1) {
var start = i;
var parent = getParentSymbolOfTypeParameter(outerTypeParameters[i]);
do {
i++;
} while (i < length_1 && getParentSymbolOfTypeParameter(outerTypeParameters[i]) === parent);
if (!ts.rangeEquals(outerTypeParameters, typeArguments, start, i)) {
var typeArgumentSlice = mapToTypeNodes(typeArguments.slice(start, i), context);
var typeArgumentNodes_1 = typeArgumentSlice && ts.createNodeArray(typeArgumentSlice);
var namePart = symbolToTypeReferenceName(parent);
(namePart.kind === 71 ? namePart : namePart.right).typeArguments = typeArgumentNodes_1;
if (qualifiedName) {
ts.Debug.assert(!qualifiedName.right);
qualifiedName = addToQualifiedNameMissingRightIdentifier(qualifiedName, namePart);
qualifiedName = ts.createQualifiedName(qualifiedName, undefined);
}
else {
qualifiedName = ts.createQualifiedName(namePart, undefined);
}
}
}
}
var entityName = undefined;
var nameIdentifier = symbolToTypeReferenceName(type.symbol);
if (qualifiedName) {
ts.Debug.assert(!qualifiedName.right);
qualifiedName = addToQualifiedNameMissingRightIdentifier(qualifiedName, nameIdentifier);
entityName = qualifiedName;
}
else {
entityName = nameIdentifier;
}
var typeArgumentNodes = void 0;
if (typeArguments.length > 0) {
var typeParameterCount = (type.target.typeParameters || ts.emptyArray).length;
typeArgumentNodes = mapToTypeNodes(typeArguments.slice(i, typeParameterCount), context);
}
if (typeArgumentNodes) {
var lastIdentifier = entityName.kind === 71 ? entityName : entityName.right;
lastIdentifier.typeArguments = undefined;
}
return ts.createTypeReferenceNode(entityName, typeArgumentNodes);
}
}
function addToQualifiedNameMissingRightIdentifier(left, right) {
ts.Debug.assert(left.right === undefined);
if (right.kind === 71) {
left.right = right;
return left;
}
var rightPart = right;
while (rightPart.left.kind !== 71) {
rightPart = rightPart.left;
}
left.right = rightPart.left;
rightPart.left = left;
return right;
}
function createTypeNodesFromResolvedType(resolvedType) {
var typeElements = [];
for (var _i = 0, _a = resolvedType.callSignatures; _i < _a.length; _i++) {
var signature = _a[_i];
typeElements.push(signatureToSignatureDeclarationHelper(signature, 155, context));
}
for (var _b = 0, _c = resolvedType.constructSignatures; _b < _c.length; _b++) {
var signature = _c[_b];
typeElements.push(signatureToSignatureDeclarationHelper(signature, 156, context));
}
if (resolvedType.stringIndexInfo) {
typeElements.push(indexInfoToIndexSignatureDeclarationHelper(resolvedType.stringIndexInfo, 0, context));
}
if (resolvedType.numberIndexInfo) {
typeElements.push(indexInfoToIndexSignatureDeclarationHelper(resolvedType.numberIndexInfo, 1, context));
}
var properties = resolvedType.properties;
if (!properties) {
return typeElements;
}
for (var _d = 0, properties_1 = properties; _d < properties_1.length; _d++) {
var propertySymbol = properties_1[_d];
var propertyType = getTypeOfSymbol(propertySymbol);
var saveEnclosingDeclaration = context.enclosingDeclaration;
context.enclosingDeclaration = undefined;
var propertyName = symbolToName(propertySymbol, context, 107455, true);
context.enclosingDeclaration = saveEnclosingDeclaration;
var optionalToken = propertySymbol.flags & 16777216 ? ts.createToken(55) : undefined;
if (propertySymbol.flags & (16 | 8192) && !getPropertiesOfObjectType(propertyType).length) {
var signatures = getSignaturesOfType(propertyType, 0);
for (var _e = 0, signatures_1 = signatures; _e < signatures_1.length; _e++) {
var signature = signatures_1[_e];
var methodDeclaration = signatureToSignatureDeclarationHelper(signature, 150, context);
methodDeclaration.name = propertyName;
methodDeclaration.questionToken = optionalToken;
typeElements.push(methodDeclaration);
}
}
else {
var propertyTypeNode = propertyType ? typeToTypeNodeHelper(propertyType, context) : ts.createKeywordTypeNode(119);
var modifiers = isReadonlySymbol(propertySymbol) ? [ts.createToken(131)] : undefined;
var propertySignature = ts.createPropertySignature(modifiers, propertyName, optionalToken, propertyTypeNode, undefined);
typeElements.push(propertySignature);
}
}
return typeElements.length ? typeElements : undefined;
}
}
function mapToTypeNodes(types, context) {
if (ts.some(types)) {
var result = [];
for (var i = 0; i < types.length; ++i) {
var type = types[i];
var typeNode = typeToTypeNodeHelper(type, context);
if (typeNode) {
result.push(typeNode);
}
}
return result;
}
}
function indexInfoToIndexSignatureDeclarationHelper(indexInfo, kind, context) {
var name = ts.getNameFromIndexInfo(indexInfo) || "x";
var indexerTypeNode = ts.createKeywordTypeNode(kind === 0 ? 136 : 133);
var indexingParameter = ts.createParameter(undefined, undefined, undefined, name, undefined, indexerTypeNode, undefined);
var typeNode = typeToTypeNodeHelper(indexInfo.type, context);
return ts.createIndexSignature(undefined, indexInfo.isReadonly ? [ts.createToken(131)] : undefined, [indexingParameter], typeNode);
}
function signatureToSignatureDeclarationHelper(signature, kind, context) {
var typeParameters = signature.typeParameters && signature.typeParameters.map(function (parameter) { return typeParameterToDeclaration(parameter, context); });
var parameters = signature.parameters.map(function (parameter) { return symbolToParameterDeclaration(parameter, context); });
if (signature.thisParameter) {
var thisParameter = symbolToParameterDeclaration(signature.thisParameter, context);
parameters.unshift(thisParameter);
}
var returnTypeNode;
if (signature.typePredicate) {
var typePredicate = signature.typePredicate;
var parameterName = typePredicate.kind === 1 ?
ts.setEmitFlags(ts.createIdentifier(typePredicate.parameterName), 16777216) :
ts.createThisTypeNode();
var typeNode = typeToTypeNodeHelper(typePredicate.type, context);
returnTypeNode = ts.createTypePredicateNode(parameterName, typeNode);
}
else {
var returnType = getReturnTypeOfSignature(signature);
returnTypeNode = returnType && typeToTypeNodeHelper(returnType, context);
}
if (context.flags & ts.NodeBuilderFlags.SuppressAnyReturnType) {
if (returnTypeNode && returnTypeNode.kind === 119) {
returnTypeNode = undefined;
}
}
else if (!returnTypeNode) {
returnTypeNode = ts.createKeywordTypeNode(119);
}
return ts.createSignatureDeclaration(kind, typeParameters, parameters, returnTypeNode);
}
function typeParameterToDeclaration(type, context) {
var name = symbolToName(type.symbol, context, 793064, true);
var constraint = getConstraintFromTypeParameter(type);
var constraintNode = constraint && typeToTypeNodeHelper(constraint, context);
var defaultParameter = getDefaultFromTypeParameter(type);
var defaultParameterNode = defaultParameter && typeToTypeNodeHelper(defaultParameter, context);
return ts.createTypeParameterDeclaration(name, constraintNode, defaultParameterNode);
}
function symbolToParameterDeclaration(parameterSymbol, context) {
var parameterDeclaration = ts.getDeclarationOfKind(parameterSymbol, 146);
if (isTransientSymbol(parameterSymbol) && parameterSymbol.isRestParameter) {
return ts.createParameter(undefined, undefined, parameterSymbol.isRestParameter ? ts.createToken(24) : undefined, "args", undefined, typeToTypeNodeHelper(anyArrayType, context), undefined);
}
var modifiers = parameterDeclaration.modifiers && parameterDeclaration.modifiers.map(ts.getSynthesizedClone);
var dotDotDotToken = ts.isRestParameter(parameterDeclaration) ? ts.createToken(24) : undefined;
var name = parameterDeclaration.name ?
parameterDeclaration.name.kind === 71 ?
ts.setEmitFlags(ts.getSynthesizedClone(parameterDeclaration.name), 16777216) :
cloneBindingName(parameterDeclaration.name) :
ts.symbolName(parameterSymbol);
var questionToken = isOptionalParameter(parameterDeclaration) ? ts.createToken(55) : undefined;
var parameterType = getTypeOfSymbol(parameterSymbol);
if (isRequiredInitializedParameter(parameterDeclaration)) {
parameterType = getNullableType(parameterType, 2048);
}
var parameterTypeNode = typeToTypeNodeHelper(parameterType, context);
var parameterNode = ts.createParameter(undefined, modifiers, dotDotDotToken, name, questionToken, parameterTypeNode, undefined);
return parameterNode;
function cloneBindingName(node) {
return elideInitializerAndSetEmitFlags(node);
function elideInitializerAndSetEmitFlags(node) {
var visited = ts.visitEachChild(node, elideInitializerAndSetEmitFlags, ts.nullTransformationContext, undefined, elideInitializerAndSetEmitFlags);
var clone = ts.nodeIsSynthesized(visited) ? visited : ts.getSynthesizedClone(visited);
if (clone.kind === 176) {
clone.initializer = undefined;
}
return ts.setEmitFlags(clone, 1 | 16777216);
}
}
}
function symbolToName(symbol, context, meaning, expectsIdentifier) {
var chain;
var isTypeParameter = symbol.flags & 262144;
if (!isTypeParameter && (context.enclosingDeclaration || context.flags & ts.NodeBuilderFlags.UseFullyQualifiedType)) {
chain = getSymbolChain(symbol, meaning, true);
ts.Debug.assert(chain && chain.length > 0);
}
else {
chain = [symbol];
}
if (expectsIdentifier && chain.length !== 1
&& !context.encounteredError
&& !(context.flags & ts.NodeBuilderFlags.AllowQualifedNameInPlaceOfIdentifier)) {
context.encounteredError = true;
}
return createEntityNameFromSymbolChain(chain, chain.length - 1);
function createEntityNameFromSymbolChain(chain, index) {
ts.Debug.assert(chain && 0 <= index && index < chain.length);
var symbol = chain[index];
var typeParameterNodes;
if (context.flags & ts.NodeBuilderFlags.WriteTypeParametersInQualifiedName && index > 0) {
var parentSymbol = chain[index - 1];
var typeParameters = void 0;
if (ts.getCheckFlags(symbol) & 1) {
typeParameters = getTypeParametersOfClassOrInterface(parentSymbol);
}
else {
var targetSymbol = getTargetSymbol(parentSymbol);
if (targetSymbol.flags & (32 | 64 | 524288)) {
typeParameters = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol);
}
}
typeParameterNodes = mapToTypeNodes(typeParameters, context);
}
var symbolName = getNameOfSymbol(symbol, context);
var identifier = ts.setEmitFlags(ts.createIdentifier(symbolName, typeParameterNodes), 16777216);
return index > 0 ? ts.createQualifiedName(createEntityNameFromSymbolChain(chain, index - 1), identifier) : identifier;
}
function getSymbolChain(symbol, meaning, endOfChain) {
var accessibleSymbolChain = getAccessibleSymbolChain(symbol, context.enclosingDeclaration, meaning, false);
var parentSymbol;
if (!accessibleSymbolChain ||
needsQualification(accessibleSymbolChain[0], context.enclosingDeclaration, accessibleSymbolChain.length === 1 ? meaning : getQualifiedLeftMeaning(meaning))) {
var parent = getParentOfSymbol(accessibleSymbolChain ? accessibleSymbolChain[0] : symbol);
if (parent) {
var parentChain = getSymbolChain(parent, getQualifiedLeftMeaning(meaning), false);
if (parentChain) {
parentSymbol = parent;
accessibleSymbolChain = parentChain.concat(accessibleSymbolChain || [symbol]);
}
}
}
if (accessibleSymbolChain) {
return accessibleSymbolChain;
}
if (endOfChain ||
!(!parentSymbol && ts.forEach(symbol.declarations, hasExternalModuleSymbol)) &&
!(symbol.flags & (2048 | 4096))) {
return [symbol];
}
}
}
}
function typePredicateToString(typePredicate, enclosingDeclaration, flags) {
return ts.usingSingleLineStringWriter(function (writer) {
getSymbolDisplayBuilder().buildTypePredicateDisplay(typePredicate, writer, enclosingDeclaration, flags);
});
}
function formatUnionTypes(types) {
var result = [];
var flags = 0;
for (var i = 0; i < types.length; i++) {
var t = types[i];
flags |= t.flags;
if (!(t.flags & 6144)) {
if (t.flags & (128 | 256)) {
var baseType = t.flags & 128 ? booleanType : getBaseTypeOfEnumLiteralType(t);
if (baseType.flags & 65536) {
var count = baseType.types.length;
if (i + count <= types.length && types[i + count - 1] === baseType.types[count - 1]) {
result.push(baseType);
i += count - 1;
continue;
}
}
}
result.push(t);
}
}
if (flags & 4096)
result.push(nullType);
if (flags & 2048)
result.push(undefinedType);
return result || types;
}
function visibilityToString(flags) {
if (flags === 8) {
return "private";
}
if (flags === 16) {
return "protected";
}
return "public";
}
function getTypeAliasForTypeLiteral(type) {
if (type.symbol && type.symbol.flags & 2048) {
var node = ts.findAncestor(type.symbol.declarations[0].parent, function (n) { return n.kind !== 168; });
if (node.kind === 231) {
return getSymbolOfNode(node);
}
}
return undefined;
}
function isTopLevelInExternalModuleAugmentation(node) {
return node && node.parent &&
node.parent.kind === 234 &&
ts.isExternalModuleAugmentation(node.parent.parent);
}
function literalTypeToString(type) {
return type.flags & 32 ? '"' + ts.escapeString(type.value) + '"' : "" + type.value;
}
function getNameOfSymbol(symbol, context) {
if (symbol.declarations && symbol.declarations.length) {
var declaration = symbol.declarations[0];
var name = ts.getNameOfDeclaration(declaration);
if (name) {
return ts.declarationNameToString(name);
}
if (declaration.parent && declaration.parent.kind === 226) {
return ts.declarationNameToString(declaration.parent.name);
}
if (context && !context.encounteredError && !(context.flags & ts.NodeBuilderFlags.AllowAnonymousIdentifier)) {
context.encounteredError = true;
}
switch (declaration.kind) {
case 199:
return "(Anonymous class)";
case 186:
case 187:
return "(Anonymous function)";
}
}
if (symbol.syntheticLiteralTypeOrigin) {
var stringValue = symbol.syntheticLiteralTypeOrigin.value;
if (!ts.isIdentifierText(stringValue, compilerOptions.target)) {
return "\"" + ts.escapeString(stringValue, 34) + "\"";
}
}
return ts.symbolName(symbol);
}
function getSymbolDisplayBuilder() {
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, 21);
if (ts.isSingleOrDoubleQuote(firstChar)) {
writer.writeStringLiteral(symbolName);
}
else {
writer.writeSymbol(symbolName, symbol);
}
writePunctuation(writer, 22);
}
else {
writePunctuation(writer, 23);
writer.writeSymbol(symbolName, symbol);
}
}
function buildSymbolDisplay(symbol, writer, enclosingDeclaration, meaning, flags, typeFlags) {
var parentSymbol;
function appendParentTypeArgumentsAndSymbolName(symbol) {
if (parentSymbol) {
if (flags & 1) {
if (ts.getCheckFlags(symbol) & 1) {
var params = getTypeParametersOfClassOrInterface(parentSymbol.flags & 2097152 ? resolveAlias(parentSymbol) : parentSymbol);
buildDisplayForTypeArgumentsAndDelimiters(params, 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, endOfChain) {
var accessibleSymbolChain = getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning, !!(flags & 2));
if (!accessibleSymbolChain ||
needsQualification(accessibleSymbolChain[0], enclosingDeclaration, accessibleSymbolChain.length === 1 ? meaning : getQualifiedLeftMeaning(meaning))) {
var parent = getParentOfSymbol(accessibleSymbolChain ? accessibleSymbolChain[0] : symbol);
if (parent) {
walkSymbol(parent, getQualifiedLeftMeaning(meaning), false);
}
}
if (accessibleSymbolChain) {
for (var _i = 0, accessibleSymbolChain_1 = accessibleSymbolChain; _i < accessibleSymbolChain_1.length; _i++) {
var accessibleSymbol = accessibleSymbolChain_1[_i];
appendParentTypeArgumentsAndSymbolName(accessibleSymbol);
}
}
else if (endOfChain ||
!(!parentSymbol && ts.forEach(symbol.declarations, hasExternalModuleSymbol)) &&
!(symbol.flags & (2048 | 4096))) {
appendParentTypeArgumentsAndSymbolName(symbol);
}
}
var isTypeParameter = symbol.flags & 262144;
var typeFormatFlag = 256 & typeFlags;
if (!isTypeParameter && (enclosingDeclaration || typeFormatFlag)) {
walkSymbol(symbol, meaning, true);
}
else {
appendParentTypeArgumentsAndSymbolName(symbol);
}
}
function buildTypeDisplay(type, writer, enclosingDeclaration, globalFlags, symbolStack) {
var globalFlagsToPass = globalFlags & (32 | 16384);
var inObjectTypeLiteral = false;
return writeType(type, globalFlags);
function writeType(type, flags) {
var nextFlags = flags & ~1024;
if (type.flags & 16793231) {
writer.writeKeyword(!(globalFlags & 32) && isTypeAny(type)
? "any"
: type.intrinsicName);
}
else if (type.flags & 16384 && type.isThisType) {
if (inObjectTypeLiteral) {
writer.reportInaccessibleThisError();
}
writer.writeKeyword("this");
}
else if (getObjectFlags(type) & 4) {
writeTypeReference(type, nextFlags);
}
else if (type.flags & 256 && !(type.flags & 65536)) {
var parent = getParentOfSymbol(type.symbol);
buildSymbolDisplay(parent, writer, enclosingDeclaration, 793064, 0, nextFlags);
if (getDeclaredTypeOfSymbol(parent) !== type) {
writePunctuation(writer, 23);
appendSymbolNameOnly(type.symbol, writer);
}
}
else if (getObjectFlags(type) & 3 || type.flags & (272 | 16384)) {
buildSymbolDisplay(type.symbol, writer, enclosingDeclaration, 793064, 0, nextFlags);
}
else if (!(flags & 1024) && type.aliasSymbol &&
((flags & 65536) || isTypeSymbolAccessible(type.aliasSymbol, enclosingDeclaration))) {
var typeArguments = type.aliasTypeArguments;
writeSymbolTypeReference(type.aliasSymbol, typeArguments, 0, ts.length(typeArguments), nextFlags);
}
else if (type.flags & 196608) {
writeUnionOrIntersectionType(type, nextFlags);
}
else if (getObjectFlags(type) & (16 | 32)) {
writeAnonymousType(type, nextFlags);
}
else if (type.flags & 96) {
writer.writeStringLiteral(literalTypeToString(type));
}
else if (type.flags & 262144) {
if (flags & 128) {
writePunctuation(writer, 19);
}
writer.writeKeyword("keyof");
writeSpace(writer);
writeType(type.type, 128);
if (flags & 128) {
writePunctuation(writer, 20);
}
}
else if (type.flags & 524288) {
writeType(type.objectType, 128);
writePunctuation(writer, 21);
writeType(type.indexType, 0);
writePunctuation(writer, 22);
}
else {
writePunctuation(writer, 17);
writeSpace(writer);
writePunctuation(writer, 24);
writeSpace(writer);
writePunctuation(writer, 18);
}
}
function writeTypeList(types, delimiter) {
for (var i = 0; i < types.length; i++) {
if (i > 0) {
if (delimiter !== 26) {
writeSpace(writer);
}
writePunctuation(writer, delimiter);
writeSpace(writer);
}
writeType(types[i], delimiter === 26 ? 0 : 128);
}
}
function writeSymbolTypeReference(symbol, typeArguments, pos, end, flags) {
if (symbol.flags & 32 || !isReservedMemberName(symbol.escapedName)) {
buildSymbolDisplay(symbol, writer, enclosingDeclaration, 793064, 0, flags);
}
if (pos < end) {
writePunctuation(writer, 27);
writeType(typeArguments[pos], 512);
pos++;
while (pos < end) {
writePunctuation(writer, 26);
writeSpace(writer);
writeType(typeArguments[pos], 0);
pos++;
}
writePunctuation(writer, 29);
}
}
function writeTypeReference(type, flags) {
var typeArguments = type.typeArguments || ts.emptyArray;
if (type.target === globalArrayType && !(flags & 1)) {
writeType(typeArguments[0], 128 | 32768);
writePunctuation(writer, 21);
writePunctuation(writer, 22);
}
else if (type.target.objectFlags & 8) {
writePunctuation(writer, 21);
writeTypeList(type.typeArguments.slice(0, getTypeReferenceArity(type)), 26);
writePunctuation(writer, 22);
}
else if (flags & 16384 &&
type.symbol.valueDeclaration &&
type.symbol.valueDeclaration.kind === 199) {
writeAnonymousType(type, flags);
}
else {
var outerTypeParameters = type.target.outerTypeParameters;
var i = 0;
if (outerTypeParameters) {
var length_2 = outerTypeParameters.length;
while (i < length_2) {
var start = i;
var parent = getParentSymbolOfTypeParameter(outerTypeParameters[i]);
do {
i++;
} while (i < length_2 && getParentSymbolOfTypeParameter(outerTypeParameters[i]) === parent);
if (!ts.rangeEquals(outerTypeParameters, typeArguments, start, i)) {
writeSymbolTypeReference(parent, typeArguments, start, i, flags);
writePunctuation(writer, 23);
}
}
}
var typeParameterCount = (type.target.typeParameters || ts.emptyArray).length;
writeSymbolTypeReference(type.symbol, typeArguments, i, typeParameterCount, flags);
}
}
function writeUnionOrIntersectionType(type, flags) {
if (flags & 128) {
writePunctuation(writer, 19);
}
if (type.flags & 65536) {
writeTypeList(formatUnionTypes(type.types), 49);
}
else {
writeTypeList(type.types, 48);
}
if (flags & 128) {
writePunctuation(writer, 20);
}
}
function writeAnonymousType(type, flags) {
var symbol = type.symbol;
if (symbol) {
if (symbol.flags & 32 &&
!getBaseTypeVariableOfClass(symbol) &&
!(symbol.valueDeclaration.kind === 199 && flags & 16384) ||
symbol.flags & (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, 793064, 0, flags);
}
else {
writeKeyword(writer, 119);
}
}
else {
if (!symbolStack) {
symbolStack = [];
}
var isConstructorObject = type.objectFlags & 16 && type.symbol && type.symbol.flags & 32;
if (isConstructorObject) {
writeLiteralType(type, flags);
}
else {
symbolStack.push(symbol);
writeLiteralType(type, flags);
symbolStack.pop();
}
}
}
else {
writeLiteralType(type, flags);
}
function shouldWriteTypeOfFunctionSymbol() {
var isStaticMethodSymbol = !!(symbol.flags & 8192) &&
ts.some(symbol.declarations, function (declaration) { return ts.hasModifier(declaration, 32); });
var isNonLocalFunctionSymbol = !!(symbol.flags & 16) &&
(symbol.parent ||
ts.some(symbol.declarations, function (declaration) {
return declaration.parent.kind === 265 || declaration.parent.kind === 234;
}));
if (isStaticMethodSymbol || isNonLocalFunctionSymbol) {
return !!(flags & 4) ||
ts.contains(symbolStack, symbol);
}
}
}
function writeTypeOfSymbol(type, typeFormatFlags) {
if (typeFormatFlags & 32768) {
writePunctuation(writer, 19);
}
writeKeyword(writer, 103);
writeSpace(writer);
buildSymbolDisplay(type.symbol, writer, enclosingDeclaration, 107455, 0, typeFormatFlags);
if (typeFormatFlags & 32768) {
writePunctuation(writer, 20);
}
}
function writePropertyWithModifiers(prop) {
if (isReadonlySymbol(prop)) {
writeKeyword(writer, 131);
writeSpace(writer);
}
buildSymbolDisplay(prop, writer);
if (prop.flags & 16777216) {
writePunctuation(writer, 55);
}
}
function shouldAddParenthesisAroundFunctionType(callSignature, flags) {
if (flags & 128) {
return true;
}
else if (flags & 512) {
var typeParameters = callSignature.target && (flags & 64) ?
callSignature.target.typeParameters : callSignature.typeParameters;
return typeParameters && typeParameters.length !== 0;
}
return false;
}
function writeLiteralType(type, flags) {
if (isGenericMappedType(type)) {
writeMappedType(type);
return;
}
var resolved = resolveStructuredTypeMembers(type);
if (!resolved.properties.length && !resolved.stringIndexInfo && !resolved.numberIndexInfo) {
if (!resolved.callSignatures.length && !resolved.constructSignatures.length) {
writePunctuation(writer, 17);
writePunctuation(writer, 18);
return;
}
if (resolved.callSignatures.length === 1 && !resolved.constructSignatures.length) {
var parenthesizeSignature = shouldAddParenthesisAroundFunctionType(resolved.callSignatures[0], flags);
if (parenthesizeSignature) {
writePunctuation(writer, 19);
}
buildSignatureDisplay(resolved.callSignatures[0], writer, enclosingDeclaration, globalFlagsToPass | 16, undefined, symbolStack);
if (parenthesizeSignature) {
writePunctuation(writer, 20);
}
return;
}
if (resolved.constructSignatures.length === 1 && !resolved.callSignatures.length) {
if (flags & 128) {
writePunctuation(writer, 19);
}
writeKeyword(writer, 94);
writeSpace(writer);
buildSignatureDisplay(resolved.constructSignatures[0], writer, enclosingDeclaration, globalFlagsToPass | 16, undefined, symbolStack);
if (flags & 128) {
writePunctuation(writer, 20);
}
return;
}
}
var saveInObjectTypeLiteral = inObjectTypeLiteral;
inObjectTypeLiteral = true;
writePunctuation(writer, 17);
writer.writeLine();
writer.increaseIndent();
writeObjectLiteralType(resolved);
writer.decreaseIndent();
writePunctuation(writer, 18);
inObjectTypeLiteral = saveInObjectTypeLiteral;
}
function writeObjectLiteralType(resolved) {
for (var _i = 0, _a = resolved.callSignatures; _i < _a.length; _i++) {
var signature = _a[_i];
buildSignatureDisplay(signature, writer, enclosingDeclaration, globalFlagsToPass, undefined, symbolStack);
writePunctuation(writer, 25);
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, 25);
writer.writeLine();
}
buildIndexSignatureDisplay(resolved.stringIndexInfo, writer, 0, enclosingDeclaration, globalFlags, symbolStack);
buildIndexSignatureDisplay(resolved.numberIndexInfo, writer, 1, enclosingDeclaration, globalFlags, symbolStack);
for (var _d = 0, _e = resolved.properties; _d < _e.length; _d++) {
var p = _e[_d];
if (globalFlags & 16384) {
if (p.flags & 4194304) {
continue;
}
if (ts.getDeclarationModifierFlagsFromSymbol(p) & (8 | 16)) {
writer.reportPrivateInBaseOfClassExpression(ts.symbolName(p));
}
}
var t = getTypeOfSymbol(p);
if (p.flags & (16 | 8192) && !getPropertiesOfObjectType(t).length) {
var signatures = getSignaturesOfType(t, 0);
for (var _f = 0, signatures_2 = signatures; _f < signatures_2.length; _f++) {
var signature = signatures_2[_f];
writePropertyWithModifiers(p);
buildSignatureDisplay(signature, writer, enclosingDeclaration, globalFlagsToPass, undefined, symbolStack);
writePunctuation(writer, 25);
writer.writeLine();
}
}
else {
writePropertyWithModifiers(p);
writePunctuation(writer, 56);
writeSpace(writer);
writeType(t, globalFlags & 16384);
writePunctuation(writer, 25);
writer.writeLine();
}
}
}
function writeMappedType(type) {
writePunctuation(writer, 17);
writer.writeLine();
writer.increaseIndent();
if (type.declaration.readonlyToken) {
writeKeyword(writer, 131);
writeSpace(writer);
}
writePunctuation(writer, 21);
appendSymbolNameOnly(getTypeParameterFromMappedType(type).symbol, writer);
writeSpace(writer);
writeKeyword(writer, 92);
writeSpace(writer);
writeType(getConstraintTypeFromMappedType(type), 0);
writePunctuation(writer, 22);
if (type.declaration.questionToken) {
writePunctuation(writer, 55);
}
writePunctuation(writer, 56);
writeSpace(writer);
writeType(getTemplateTypeFromMappedType(type), 0);
writePunctuation(writer, 25);
writer.writeLine();
writer.decreaseIndent();
writePunctuation(writer, 18);
}
}
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, 85);
writeSpace(writer);
buildTypeDisplay(constraint, writer, enclosingDeclaration, flags, symbolStack);
}
var defaultType = getDefaultFromTypeParameter(tp);
if (defaultType) {
writeSpace(writer);
writePunctuation(writer, 58);
writeSpace(writer);
buildTypeDisplay(defaultType, writer, enclosingDeclaration, flags, symbolStack);
}
}
function buildParameterDisplay(p, writer, enclosingDeclaration, flags, symbolStack) {
var parameterNode = p.valueDeclaration;
if (parameterNode ? ts.isRestParameter(parameterNode) : isTransientSymbol(p) && p.isRestParameter) {
writePunctuation(writer, 24);
}
if (parameterNode && ts.isBindingPattern(parameterNode.name)) {
buildBindingPatternDisplay(parameterNode.name, writer, enclosingDeclaration, flags, symbolStack);
}
else {
appendSymbolNameOnly(p, writer);
}
if (parameterNode && isOptionalParameter(parameterNode)) {
writePunctuation(writer, 55);
}
writePunctuation(writer, 56);
writeSpace(writer);
var type = getTypeOfSymbol(p);
if (parameterNode && isRequiredInitializedParameter(parameterNode)) {
type = getNullableType(type, 2048);
}
buildTypeDisplay(type, writer, enclosingDeclaration, flags, symbolStack);
}
function buildBindingPatternDisplay(bindingPattern, writer, enclosingDeclaration, flags, symbolStack) {
if (bindingPattern.kind === 174) {
writePunctuation(writer, 17);
buildDisplayForCommaSeparatedList(bindingPattern.elements, writer, function (e) { return buildBindingElementDisplay(e, writer, enclosingDeclaration, flags, symbolStack); });
writePunctuation(writer, 18);
}
else if (bindingPattern.kind === 175) {
writePunctuation(writer, 21);
var elements = bindingPattern.elements;
buildDisplayForCommaSeparatedList(elements, writer, function (e) { return buildBindingElementDisplay(e, writer, enclosingDeclaration, flags, symbolStack); });
if (elements && elements.hasTrailingComma) {
writePunctuation(writer, 26);
}
writePunctuation(writer, 22);
}
}
function buildBindingElementDisplay(bindingElement, writer, enclosingDeclaration, flags, symbolStack) {
if (ts.isOmittedExpression(bindingElement)) {
return;
}
ts.Debug.assert(bindingElement.kind === 176);
if (bindingElement.propertyName) {
writer.writeProperty(ts.getTextOfNode(bindingElement.propertyName));
writePunctuation(writer, 56);
writeSpace(writer);
}
if (ts.isBindingPattern(bindingElement.name)) {
buildBindingPatternDisplay(bindingElement.name, writer, enclosingDeclaration, flags, symbolStack);
}
else {
if (bindingElement.dotDotDotToken) {
writePunctuation(writer, 24);
}
appendSymbolNameOnly(bindingElement.symbol, writer);
}
}
function buildDisplayForTypeParametersAndDelimiters(typeParameters, writer, enclosingDeclaration, flags, symbolStack) {
if (typeParameters && typeParameters.length) {
writePunctuation(writer, 27);
buildDisplayForCommaSeparatedList(typeParameters, writer, function (p) { return buildTypeParameterDisplay(p, writer, enclosingDeclaration, flags, symbolStack); });
writePunctuation(writer, 29);
}
}
function buildDisplayForCommaSeparatedList(list, writer, action) {
for (var i = 0; i < list.length; i++) {
if (i > 0) {
writePunctuation(writer, 26);
writeSpace(writer);
}
action(list[i]);
}
}
function buildDisplayForTypeArgumentsAndDelimiters(typeParameters, mapper, writer, enclosingDeclaration) {
if (typeParameters && typeParameters.length) {
writePunctuation(writer, 27);
var flags = 512;
for (var i = 0; i < typeParameters.length; i++) {
if (i > 0) {
writePunctuation(writer, 26);
writeSpace(writer);
flags = 0;
}
buildTypeDisplay(mapper(typeParameters[i]), writer, enclosingDeclaration, flags);
}
writePunctuation(writer, 29);
}
}
function buildDisplayForParametersAndDelimiters(thisParameter, parameters, writer, enclosingDeclaration, flags, symbolStack) {
writePunctuation(writer, 19);
if (thisParameter) {
buildParameterDisplay(thisParameter, writer, enclosingDeclaration, flags, symbolStack);
}
for (var i = 0; i < parameters.length; i++) {
if (i > 0 || thisParameter) {
writePunctuation(writer, 26);
writeSpace(writer);
}
buildParameterDisplay(parameters[i], writer, enclosingDeclaration, flags, symbolStack);
}
writePunctuation(writer, 20);
}
function buildTypePredicateDisplay(predicate, writer, enclosingDeclaration, flags, symbolStack) {
if (ts.isIdentifierTypePredicate(predicate)) {
writer.writeParameter(predicate.parameterName);
}
else {
writeKeyword(writer, 99);
}
writeSpace(writer);
writeKeyword(writer, 126);
writeSpace(writer);
buildTypeDisplay(predicate.type, writer, enclosingDeclaration, flags, symbolStack);
}
function buildReturnTypeDisplay(signature, writer, enclosingDeclaration, flags, symbolStack) {
var returnType = getReturnTypeOfSignature(signature);
if (flags & 4096 && isTypeAny(returnType)) {
return;
}
if (flags & 16) {
writeSpace(writer);
writePunctuation(writer, 36);
}
else {
writePunctuation(writer, 56);
}
writeSpace(writer);
if (signature.typePredicate) {
buildTypePredicateDisplay(signature.typePredicate, writer, enclosingDeclaration, flags, symbolStack);
}
else {
buildTypeDisplay(returnType, writer, enclosingDeclaration, flags, symbolStack);
}
}
function buildSignatureDisplay(signature, writer, enclosingDeclaration, flags, kind, symbolStack) {
if (kind === 1) {
writeKeyword(writer, 94);
writeSpace(writer);
}
if (signature.target && (flags & 64)) {
buildDisplayForTypeArgumentsAndDelimiters(signature.target.typeParameters, signature.mapper, writer, enclosingDeclaration);
}
else {
buildDisplayForTypeParametersAndDelimiters(signature.typeParameters, writer, enclosingDeclaration, flags, symbolStack);
}
buildDisplayForParametersAndDelimiters(signature.thisParameter, signature.parameters, writer, enclosingDeclaration, flags, symbolStack);
buildReturnTypeDisplay(signature, writer, enclosingDeclaration, flags, symbolStack);
}
function buildIndexSignatureDisplay(info, writer, kind, enclosingDeclaration, globalFlags, symbolStack) {
if (info) {
if (info.isReadonly) {
writeKeyword(writer, 131);
writeSpace(writer);
}
writePunctuation(writer, 21);
writer.writeParameter(info.declaration ? ts.declarationNameToString(info.declaration.parameters[0].name) : "x");
writePunctuation(writer, 56);
writeSpace(writer);
switch (kind) {
case 1:
writeKeyword(writer, 133);
break;
case 0:
writeKeyword(writer, 136);
break;
}
writePunctuation(writer, 22);
writePunctuation(writer, 56);
writeSpace(writer);
buildTypeDisplay(info.type, writer, enclosingDeclaration, globalFlags, symbolStack);
writePunctuation(writer, 25);
writer.writeLine();
}
}
return _displayBuilder || (_displayBuilder = {
buildSymbolDisplay: buildSymbolDisplay,
buildTypeDisplay: buildTypeDisplay,
buildTypeParameterDisplay: buildTypeParameterDisplay,
buildTypePredicateDisplay: buildTypePredicateDisplay,
buildParameterDisplay: buildParameterDisplay,
buildDisplayForParametersAndDelimiters: buildDisplayForParametersAndDelimiters,
buildDisplayForTypeParametersAndDelimiters: buildDisplayForTypeParametersAndDelimiters,
buildTypeParameterDisplayFromSymbol: buildTypeParameterDisplayFromSymbol,
buildSignatureDisplay: buildSignatureDisplay,
buildIndexSignatureDisplay: buildIndexSignatureDisplay,
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 176:
return isDeclarationVisible(node.parent.parent);
case 226:
if (ts.isBindingPattern(node.name) &&
!node.name.elements.length) {
return false;
}
case 233:
case 229:
case 230:
case 231:
case 228:
case 232:
case 237:
if (ts.isExternalModuleAugmentation(node)) {
return true;
}
var parent = getDeclarationContainer(node);
if (!(ts.getCombinedModifierFlags(node) & 1) &&
!(node.kind !== 237 && parent.kind !== 265 && ts.isInAmbientContext(parent))) {
return isGlobalSourceFile(parent);
}
return isDeclarationVisible(parent);
case 149:
case 148:
case 153:
case 154:
case 151:
case 150:
if (ts.hasModifier(node, 8 | 16)) {
return false;
}
case 152:
case 156:
case 155:
case 157:
case 146:
case 234:
case 160:
case 161:
case 163:
case 159:
case 164:
case 165:
case 166:
case 167:
case 168:
return isDeclarationVisible(node.parent);
case 239:
case 240:
case 242:
return false;
case 145:
case 265:
case 236:
return true;
case 243:
return false;
default:
return false;
}
}
}
function collectLinkedAliases(node) {
var exportSymbol;
if (node.parent && node.parent.kind === 243) {
exportSymbol = resolveName(node.parent, node.escapedText, 107455 | 793064 | 1920 | 2097152, ts.Diagnostics.Cannot_find_name_0, node, false);
}
else if (node.parent.kind === 246) {
exportSymbol = getTargetOfExportSpecifier(node.parent, 107455 | 793064 | 1920 | 2097152);
}
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;
ts.pushIfUnique(result, resultNode);
if (ts.isInternalModuleImportEqualsDeclaration(declaration)) {
var internalModuleReference = declaration.moduleReference;
var firstIdentifier = getFirstIdentifier(internalModuleReference);
var importSymbol = resolveName(declaration, firstIdentifier.escapedText, 107455 | 793064 | 1920, undefined, undefined, false);
if (importSymbol) {
buildVisibleNodeList(importSymbol.declarations);
}
}
});
}
}
function pushTypeResolution(target, propertyName) {
var resolutionCycleStartIndex = findResolutionCycleStartIndex(target, propertyName);
if (resolutionCycleStartIndex >= 0) {
var length_3 = resolutionTargets.length;
for (var i = resolutionCycleStartIndex; i < length_3; i++) {
resolutionResults[i] = false;
}
return false;
}
resolutionTargets.push(target);
resolutionResults.push(true);
resolutionPropertyNames.push(propertyName);
return true;
}
function findResolutionCycleStartIndex(target, propertyName) {
for (var i = resolutionTargets.length - 1; i >= 0; i--) {
if (hasType(resolutionTargets[i], resolutionPropertyNames[i])) {
return -1;
}
if (resolutionTargets[i] === target && resolutionPropertyNames[i] === propertyName) {
return i;
}
}
return -1;
}
function hasType(target, propertyName) {
if (propertyName === 0) {
return getSymbolLinks(target).type;
}
if (propertyName === 2) {
return getSymbolLinks(target).declaredType;
}
if (propertyName === 1) {
return target.resolvedBaseConstructorType;
}
if (propertyName === 3) {
return target.resolvedReturnType;
}
ts.Debug.fail("Unhandled TypeSystemPropertyName " + propertyName);
}
function popTypeResolution() {
resolutionTargets.pop();
resolutionPropertyNames.pop();
return resolutionResults.pop();
}
function getDeclarationContainer(node) {
node = ts.findAncestor(ts.getRootDeclaration(node), function (node) {
switch (node.kind) {
case 226:
case 227:
case 242:
case 241:
case 240:
case 239:
return false;
default:
return true;
}
});
return node && 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, false);
}
function isComputedNonLiteralName(name) {
return name.kind === 144 && !ts.isStringOrNumericLiteral(name.expression);
}
function getRestType(source, properties, symbol) {
source = filterType(source, function (t) { return !(t.flags & 6144); });
if (source.flags & 8192) {
return emptyObjectType;
}
if (source.flags & 65536) {
return mapType(source, function (t) { return getRestType(t, properties, symbol); });
}
var members = ts.createSymbolTable();
var names = ts.createUnderscoreEscapedMap();
for (var _i = 0, properties_2 = properties; _i < properties_2.length; _i++) {
var name = properties_2[_i];
names.set(ts.getTextOfPropertyName(name), true);
}
for (var _a = 0, _b = getPropertiesOfType(source); _a < _b.length; _a++) {
var prop = _b[_a];
var inNamesToRemove = names.has(prop.escapedName);
var isPrivate = ts.getDeclarationModifierFlagsFromSymbol(prop) & (8 | 16);
var isSetOnlyAccessor = prop.flags & 65536 && !(prop.flags & 32768);
if (!inNamesToRemove && !isPrivate && !isClassMethod(prop) && !isSetOnlyAccessor) {
members.set(prop.escapedName, prop);
}
}
var stringIndexInfo = getIndexInfoOfType(source, 0);
var numberIndexInfo = getIndexInfoOfType(source, 1);
return createAnonymousType(symbol, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, numberIndexInfo);
}
function getTypeForBindingElement(declaration) {
var pattern = declaration.parent;
var parentType = getTypeForBindingElementParent(pattern.parent);
if (parentType === unknownType) {
return unknownType;
}
if (!parentType) {
return declaration.initializer ? checkDeclarationInitializer(declaration) : parentType;
}
if (isTypeAny(parentType)) {
return parentType;
}
var type;
if (pattern.kind === 174) {
if (declaration.dotDotDotToken) {
if (!isValidSpreadType(parentType)) {
error(declaration, ts.Diagnostics.Rest_types_may_only_be_created_from_object_types);
return unknownType;
}
var literalMembers = [];
for (var _i = 0, _a = pattern.elements; _i < _a.length; _i++) {
var element = _a[_i];
if (!element.dotDotDotToken) {
literalMembers.push(element.propertyName || element.name);
}
}
type = getRestType(parentType, literalMembers, declaration.symbol);
}
else {
var name = declaration.propertyName || declaration.name;
if (isComputedNonLiteralName(name)) {
return anyType;
}
var text = ts.getTextOfPropertyName(name);
var declaredType = getTypeOfPropertyOfType(parentType, text);
type = declaredType && getFlowTypeOfReference(declaration, declaredType) ||
isNumericLiteralName(text) && getIndexTypeOfType(parentType, 1) ||
getIndexTypeOfType(parentType, 0);
if (!type) {
error(name, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(parentType), ts.declarationNameToString(name));
return unknownType;
}
}
}
else {
var elementType = checkIteratedTypeOrElementType(parentType, pattern, false, false);
if (declaration.dotDotDotToken) {
type = createArrayType(elementType);
}
else {
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), getTypeReferenceArity(parentType), pattern.elements.length);
}
else {
error(declaration, ts.Diagnostics.Type_0_has_no_property_1, typeToString(parentType), propName);
}
return unknownType;
}
}
}
if (strictNullChecks && declaration.initializer && !(getFalsyFlags(checkExpressionCached(declaration.initializer)) & 2048)) {
type = getTypeWithFacts(type, 131072);
}
return declaration.initializer ?
getUnionType([type, checkExpressionCached(declaration.initializer)], true) :
type;
}
function getTypeForDeclarationFromJSDocComment(declaration) {
var jsdocType = ts.getJSDocType(declaration);
if (jsdocType) {
return getTypeFromTypeNode(jsdocType);
}
return undefined;
}
function isNullOrUndefined(node) {
var expr = ts.skipParentheses(node);
return expr.kind === 95 || expr.kind === 71 && getResolvedSymbol(expr) === undefinedSymbol;
}
function isEmptyArrayLiteral(node) {
var expr = ts.skipParentheses(node);
return expr.kind === 177 && expr.elements.length === 0;
}
function addOptionality(type, optional) {
return strictNullChecks && optional ? getNullableType(type, 2048) : type;
}
function getTypeForVariableLikeDeclaration(declaration, includeOptionality) {
if (declaration.parent.parent.kind === 215) {
var indexType = getIndexType(checkNonNullExpression(declaration.parent.parent.expression));
return indexType.flags & (16384 | 262144) ? indexType : stringType;
}
if (declaration.parent.parent.kind === 216) {
var forOfStatement = declaration.parent.parent;
return checkRightHandSideOfForOf(forOfStatement.expression, forOfStatement.awaitModifier) || anyType;
}
if (ts.isBindingPattern(declaration.parent)) {
return getTypeForBindingElement(declaration);
}
var typeNode = ts.getEffectiveTypeAnnotationNode(declaration);
if (typeNode) {
var declaredType = getTypeFromTypeNode(typeNode);
return addOptionality(declaredType, declaration.questionToken && includeOptionality);
}
if ((noImplicitAny || ts.isInJavaScriptFile(declaration)) &&
declaration.kind === 226 && !ts.isBindingPattern(declaration.name) &&
!(ts.getCombinedModifierFlags(declaration) & 1) && !ts.isInAmbientContext(declaration)) {
if (!(ts.getCombinedNodeFlags(declaration) & 2) && (!declaration.initializer || isNullOrUndefined(declaration.initializer))) {
return autoType;
}
if (declaration.initializer && isEmptyArrayLiteral(declaration.initializer)) {
return autoArrayType;
}
}
if (declaration.kind === 146) {
var func = declaration.parent;
if (func.kind === 154 && !ts.hasDynamicName(func)) {
var getter = ts.getDeclarationOfKind(declaration.parent.symbol, 153);
if (getter) {
var getterSignature = getSignatureFromDeclaration(getter);
var thisParameter = getAccessorThisParameter(func);
if (thisParameter && declaration === thisParameter) {
ts.Debug.assert(!thisParameter.type);
return getTypeOfSymbol(getterSignature.thisParameter);
}
return getReturnTypeOfSignature(getterSignature);
}
}
var type = void 0;
if (declaration.symbol.escapedName === "this") {
type = getContextualThisParameterType(func);
}
else {
type = getContextuallyTypedParameterType(declaration);
}
if (type) {
return addOptionality(type, declaration.questionToken && includeOptionality);
}
}
if (declaration.initializer) {
var type = checkDeclarationInitializer(declaration);
return addOptionality(type, declaration.questionToken && includeOptionality);
}
if (ts.isJsxAttribute(declaration)) {
return trueType;
}
if (declaration.kind === 262) {
return checkIdentifier(declaration.name);
}
if (ts.isBindingPattern(declaration.name)) {
return getTypeFromBindingPattern(declaration.name, false, true);
}
return undefined;
}
function getWidenedTypeFromJSSpecialPropertyDeclarations(symbol) {
var types = [];
var definedInConstructor = false;
var definedInMethod = false;
var jsDocType;
for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
var declaration = _a[_i];
var expression = declaration.kind === 194 ? declaration :
declaration.kind === 179 ? ts.getAncestor(declaration, 194) :
undefined;
if (!expression) {
return unknownType;
}
if (ts.isPropertyAccessExpression(expression.left) && expression.left.expression.kind === 99) {
if (ts.getThisContainer(expression, false).kind === 152) {
definedInConstructor = true;
}
else {
definedInMethod = true;
}
}
var type_1 = getTypeForDeclarationFromJSDocComment(expression.parent);
if (type_1) {
var declarationType = getWidenedType(type_1);
if (!jsDocType) {
jsDocType = declarationType;
}
else if (jsDocType !== unknownType && declarationType !== unknownType && !isTypeIdenticalTo(jsDocType, declarationType)) {
var name = ts.getNameOfDeclaration(declaration);
error(name, ts.Diagnostics.Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2, ts.declarationNameToString(name), typeToString(jsDocType), typeToString(declarationType));
}
}
else if (!jsDocType) {
types.push(getWidenedLiteralType(checkExpressionCached(expression.right)));
}
}
var type = jsDocType || getUnionType(types, true);
return getWidenedType(addOptionality(type, definedInMethod && !definedInConstructor));
}
function getTypeFromBindingElement(element, includePatternInType, reportErrors) {
if (element.initializer) {
return checkDeclarationInitializer(element);
}
if (ts.isBindingPattern(element.name)) {
return getTypeFromBindingPattern(element.name, includePatternInType, reportErrors);
}
if (reportErrors && noImplicitAny && !declarationBelongsToPrivateAmbientMember(element)) {
reportImplicitAnyError(element, anyType);
}
return anyType;
}
function getTypeFromObjectBindingPattern(pattern, includePatternInType, reportErrors) {
var members = ts.createSymbolTable();
var stringIndexInfo;
var hasComputedProperties = false;
ts.forEach(pattern.elements, function (e) {
var name = e.propertyName || e.name;
if (isComputedNonLiteralName(name)) {
hasComputedProperties = true;
return;
}
if (e.dotDotDotToken) {
stringIndexInfo = createIndexInfo(anyType, false);
return;
}
var text = ts.getTextOfPropertyName(name);
var flags = 4 | (e.initializer ? 16777216 : 0);
var symbol = createSymbol(flags, text);
symbol.type = getTypeFromBindingElement(e, includePatternInType, reportErrors);
symbol.bindingElement = e;
members.set(symbol.escapedName, symbol);
});
var result = createAnonymousType(undefined, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, undefined);
if (includePatternInType) {
result.pattern = pattern;
}
if (hasComputedProperties) {
result.objectFlags |= 512;
}
return result;
}
function getTypeFromArrayBindingPattern(pattern, includePatternInType, reportErrors) {
var elements = pattern.elements;
var lastElement = ts.lastOrUndefined(elements);
if (elements.length === 0 || (!ts.isOmittedExpression(lastElement) && lastElement.dotDotDotToken)) {
return languageVersion >= 2 ? createIterableType(anyType) : anyArrayType;
}
var elementTypes = ts.map(elements, function (e) { return ts.isOmittedExpression(e) ? anyType : getTypeFromBindingElement(e, includePatternInType, reportErrors); });
var result = createTupleType(elementTypes);
if (includePatternInType) {
result = cloneTypeReference(result);
result.pattern = pattern;
}
return result;
}
function getTypeFromBindingPattern(pattern, includePatternInType, reportErrors) {
return pattern.kind === 174
? getTypeFromObjectBindingPattern(pattern, includePatternInType, reportErrors)
: getTypeFromArrayBindingPattern(pattern, includePatternInType, reportErrors);
}
function getWidenedTypeForVariableLikeDeclaration(declaration, reportErrors) {
var type = getTypeForVariableLikeDeclaration(declaration, true);
if (type) {
if (reportErrors) {
reportErrorsFromWidening(declaration, type);
}
if (declaration.kind === 261) {
return type;
}
return getWidenedType(type);
}
type = declaration.dotDotDotToken ? anyArrayType : anyType;
if (reportErrors && noImplicitAny) {
if (!declarationBelongsToPrivateAmbientMember(declaration)) {
reportImplicitAnyError(declaration, type);
}
}
return type;
}
function declarationBelongsToPrivateAmbientMember(declaration) {
var root = ts.getRootDeclaration(declaration);
var memberDeclaration = root.kind === 146 ? root.parent : root;
return isPrivateWithinAmbient(memberDeclaration);
}
function getTypeOfVariableOrParameterOrProperty(symbol) {
var links = getSymbolLinks(symbol);
if (!links.type) {
if (symbol.flags & 4194304) {
return links.type = getTypeOfPrototypeProperty(symbol);
}
var declaration = symbol.valueDeclaration;
if (ts.isCatchClauseVariableDeclarationOrBindingElement(declaration)) {
return links.type = anyType;
}
if (declaration.kind === 243) {
return links.type = checkExpression(declaration.expression);
}
if (ts.isInJavaScriptFile(declaration) && ts.isJSDocPropertyLikeTag(declaration) && declaration.typeExpression) {
return links.type = getTypeFromTypeNode(declaration.typeExpression.type);
}
if (!pushTypeResolution(symbol, 0)) {
return unknownType;
}
var type = void 0;
if (declaration.kind === 194 ||
declaration.kind === 179 && declaration.parent.kind === 194) {
type = getWidenedTypeFromJSSpecialPropertyDeclarations(symbol);
}
else {
type = getWidenedTypeForVariableLikeDeclaration(declaration, true);
}
if (!popTypeResolution()) {
type = reportCircularityError(symbol);
}
links.type = type;
}
return links.type;
}
function getAnnotatedAccessorType(accessor) {
if (accessor) {
if (accessor.kind === 153) {
var getterTypeAnnotation = ts.getEffectiveReturnTypeNode(accessor);
return getterTypeAnnotation && getTypeFromTypeNode(getterTypeAnnotation);
}
else {
var setterTypeAnnotation = ts.getEffectiveSetAccessorTypeAnnotationNode(accessor);
return setterTypeAnnotation && getTypeFromTypeNode(setterTypeAnnotation);
}
}
return undefined;
}
function getAnnotatedAccessorThisParameter(accessor) {
var parameter = getAccessorThisParameter(accessor);
return parameter && parameter.symbol;
}
function getThisTypeOfDeclaration(declaration) {
return getThisTypeOfSignature(getSignatureFromDeclaration(declaration));
}
function getTypeOfAccessors(symbol) {
var links = getSymbolLinks(symbol);
if (!links.type) {
var getter = ts.getDeclarationOfKind(symbol, 153);
var setter = ts.getDeclarationOfKind(symbol, 154);
if (getter && ts.isInJavaScriptFile(getter)) {
var jsDocType = getTypeForDeclarationFromJSDocComment(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 (noImplicitAny) {
if (setter) {
error(setter, ts.Diagnostics.Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation, symbolToString(symbol));
}
else {
ts.Debug.assert(!!getter, "there must existed getter as we are current checking either setter or getter in this function");
error(getter, ts.Diagnostics.Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation, symbolToString(symbol));
}
}
type = anyType;
}
}
}
if (!popTypeResolution()) {
type = anyType;
if (noImplicitAny) {
var getter_1 = ts.getDeclarationOfKind(symbol, 153);
error(getter_1, ts.Diagnostics._0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions, symbolToString(symbol));
}
}
links.type = type;
}
return links.type;
}
function getBaseTypeVariableOfClass(symbol) {
var baseConstructorType = getBaseConstructorTypeOfClass(getDeclaredTypeOfClassOrInterface(symbol));
return baseConstructorType.flags & 540672 ? baseConstructorType : undefined;
}
function getTypeOfFuncClassEnumModule(symbol) {
var links = getSymbolLinks(symbol);
if (!links.type) {
if (symbol.flags & 1536 && ts.isShorthandAmbientModuleSymbol(symbol)) {
links.type = anyType;
}
else {
var type = createObjectType(16, symbol);
if (symbol.flags & 32) {
var baseTypeVariable = getBaseTypeVariableOfClass(symbol);
links.type = baseTypeVariable ? getIntersectionType([type, baseTypeVariable]) : type;
}
else {
links.type = strictNullChecks && symbol.flags & 16777216 ? getNullableType(type, 2048) : type;
}
}
}
return links.type;
}
function getTypeOfEnumMember(symbol) {
var links = getSymbolLinks(symbol);
if (!links.type) {
links.type = getDeclaredTypeOfEnumMember(symbol);
}
return links.type;
}
function getTypeOfAlias(symbol) {
var links = getSymbolLinks(symbol);
if (!links.type) {
var targetSymbol = resolveAlias(symbol);
links.type = targetSymbol.flags & 107455
? getTypeOfSymbol(targetSymbol)
: unknownType;
}
return links.type;
}
function getTypeOfInstantiatedSymbol(symbol) {
var links = getSymbolLinks(symbol);
if (!links.type) {
if (symbolInstantiationDepth === 100) {
error(symbol.valueDeclaration, ts.Diagnostics.Generic_type_instantiation_is_excessively_deep_and_possibly_infinite);
links.type = unknownType;
}
else {
if (!pushTypeResolution(symbol, 0)) {
return unknownType;
}
symbolInstantiationDepth++;
var type = instantiateType(getTypeOfSymbol(links.target), links.mapper);
symbolInstantiationDepth--;
if (!popTypeResolution()) {
type = reportCircularityError(symbol);
}
links.type = type;
}
}
return links.type;
}
function reportCircularityError(symbol) {
if (ts.getEffectiveTypeAnnotationNode(symbol.valueDeclaration)) {
error(symbol.valueDeclaration, ts.Diagnostics._0_is_referenced_directly_or_indirectly_in_its_own_type_annotation, symbolToString(symbol));
return unknownType;
}
if (noImplicitAny) {
error(symbol.valueDeclaration, ts.Diagnostics._0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or_indirectly_in_its_own_initializer, symbolToString(symbol));
}
return anyType;
}
function getTypeOfSymbol(symbol) {
if (ts.getCheckFlags(symbol) & 1) {
return getTypeOfInstantiatedSymbol(symbol);
}
if (symbol.flags & (3 | 4)) {
return getTypeOfVariableOrParameterOrProperty(symbol);
}
if (symbol.flags & (16 | 8192 | 32 | 384 | 512)) {
return getTypeOfFuncClassEnumModule(symbol);
}
if (symbol.flags & 8) {
return getTypeOfEnumMember(symbol);
}
if (symbol.flags & 98304) {
return getTypeOfAccessors(symbol);
}
if (symbol.flags & 2097152) {
return getTypeOfAlias(symbol);
}
return unknownType;
}
function isReferenceToType(type, target) {
return type !== undefined
&& target !== undefined
&& (getObjectFlags(type) & 4) !== 0
&& type.target === target;
}
function getTargetType(type) {
return getObjectFlags(type) & 4 ? type.target : type;
}
function hasBaseType(type, checkBase) {
return check(type);
function check(type) {
if (getObjectFlags(type) & (3 | 4)) {
var target = getTargetType(type);
return target === checkBase || ts.forEach(getBaseTypes(target), check);
}
else if (type.flags & 131072) {
return ts.forEach(type.types, 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));
typeParameters = ts.appendIfUnique(typeParameters, tp);
}
return typeParameters;
}
function getOuterTypeParameters(node, includeThisTypes) {
while (true) {
node = node.parent;
if (!node) {
return undefined;
}
switch (node.kind) {
case 229:
case 199:
case 230:
case 155:
case 156:
case 150:
case 160:
case 161:
case 273:
case 228:
case 151:
case 186:
case 187:
case 231:
case 282:
case 172:
var outerTypeParameters = getOuterTypeParameters(node, includeThisTypes);
if (node.kind === 172) {
return ts.append(outerTypeParameters, getDeclaredTypeOfTypeParameter(getSymbolOfNode(node.typeParameter)));
}
var outerAndOwnTypeParameters = appendTypeParameters(outerTypeParameters, ts.getEffectiveTypeParameterDeclarations(node) || ts.emptyArray);
var thisType = includeThisTypes &&
(node.kind === 229 || node.kind === 199 || node.kind === 230) &&
getDeclaredTypeOfClassOrInterface(getSymbolOfNode(node)).thisType;
return thisType ? ts.append(outerAndOwnTypeParameters, thisType) : outerAndOwnTypeParameters;
}
}
}
function getOuterTypeParametersOfClassOrInterface(symbol) {
var declaration = symbol.flags & 32 ? symbol.valueDeclaration : ts.getDeclarationOfKind(symbol, 230);
return getOuterTypeParameters(declaration);
}
function getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol) {
var result;
for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
var node = _a[_i];
if (node.kind === 230 || node.kind === 229 ||
node.kind === 199 || node.kind === 231) {
var declaration = node;
if (declaration.typeParameters) {
result = appendTypeParameters(result, declaration.typeParameters);
}
}
}
return result;
}
function getTypeParametersOfClassOrInterface(symbol) {
return ts.concatenate(getOuterTypeParametersOfClassOrInterface(symbol), getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol));
}
function isMixinConstructorType(type) {
var signatures = getSignaturesOfType(type, 1);
if (signatures.length === 1) {
var s = signatures[0];
return !s.typeParameters && s.parameters.length === 1 && s.hasRestParameter && getTypeOfParameter(s.parameters[0]) === anyArrayType;
}
return false;
}
function isConstructorType(type) {
if (isValidBaseType(type) && getSignaturesOfType(type, 1).length > 0) {
return true;
}
if (type.flags & 540672) {
var constraint = getBaseConstraintOfType(type);
return constraint && isValidBaseType(constraint) && isMixinConstructorType(constraint);
}
return false;
}
function getBaseTypeNodeOfClass(type) {
var decl = type.symbol.valueDeclaration;
if (ts.isInJavaScriptFile(decl)) {
var tag = ts.getJSDocAugmentsTag(decl);
if (tag) {
return tag.class;
}
}
return ts.getClassExtendsHeritageClauseElement(decl);
}
function getConstructorsForTypeArguments(type, typeArgumentNodes, location) {
var typeArgCount = ts.length(typeArgumentNodes);
var isJavaScript = ts.isInJavaScriptFile(location);
return ts.filter(getSignaturesOfType(type, 1), function (sig) { return (isJavaScript || typeArgCount >= getMinTypeArgumentCount(sig.typeParameters)) && typeArgCount <= ts.length(sig.typeParameters); });
}
function getInstantiatedConstructorsForTypeArguments(type, typeArgumentNodes, location) {
var signatures = getConstructorsForTypeArguments(type, typeArgumentNodes, location);
var typeArguments = ts.map(typeArgumentNodes, getTypeFromTypeNode);
return ts.sameMap(signatures, function (sig) { return ts.some(sig.typeParameters) ? getSignatureInstantiation(sig, typeArguments, ts.isInJavaScriptFile(location)) : sig; });
}
function getBaseConstructorTypeOfClass(type) {
if (!type.resolvedBaseConstructorType) {
var decl = type.symbol.valueDeclaration;
var extended = ts.getClassExtendsHeritageClauseElement(decl);
var baseTypeNode = getBaseTypeNodeOfClass(type);
if (!baseTypeNode) {
return type.resolvedBaseConstructorType = undefinedType;
}
if (!pushTypeResolution(type, 1)) {
return unknownType;
}
var baseConstructorType = checkExpression(baseTypeNode.expression);
if (extended && baseTypeNode !== extended) {
ts.Debug.assert(!extended.typeArguments);
checkExpression(extended.expression);
}
if (baseConstructorType.flags & (32768 | 131072)) {
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.flags & 1) && baseConstructorType !== nullWideningType && !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) {
if (!type.resolvedBaseTypes) {
if (type.objectFlags & 8) {
type.resolvedBaseTypes = [createArrayType(getUnionType(type.typeParameters))];
}
else if (type.symbol.flags & (32 | 64)) {
if (type.symbol.flags & 32) {
resolveBaseTypesOfClass(type);
}
if (type.symbol.flags & 64) {
resolveBaseTypesOfInterface(type);
}
}
else {
ts.Debug.fail("type must be class or interface");
}
}
return type.resolvedBaseTypes;
}
function resolveBaseTypesOfClass(type) {
type.resolvedBaseTypes = ts.emptyArray;
var baseConstructorType = getApparentType(getBaseConstructorTypeOfClass(type));
if (!(baseConstructorType.flags & (32768 | 131072 | 1))) {
return;
}
var baseTypeNode = getBaseTypeNodeOfClass(type);
var typeArgs = typeArgumentsFromTypeReferenceNode(baseTypeNode);
var baseType;
var originalBaseType = baseConstructorType && baseConstructorType.symbol ? getDeclaredTypeOfSymbol(baseConstructorType.symbol) : undefined;
if (baseConstructorType.symbol && baseConstructorType.symbol.flags & 32 &&
areAllOuterTypeParametersApplied(originalBaseType)) {
baseType = getTypeFromClassOrInterfaceReference(baseTypeNode, baseConstructorType.symbol, typeArgs);
}
else if (baseConstructorType.flags & 1) {
baseType = baseConstructorType;
}
else {
var constructors = getInstantiatedConstructorsForTypeArguments(baseConstructorType, baseTypeNode.typeArguments, baseTypeNode);
if (!constructors.length) {
error(baseTypeNode.expression, ts.Diagnostics.No_base_constructor_has_the_specified_number_of_type_arguments);
return;
}
baseType = getReturnTypeOfSignature(constructors[0]);
}
if (baseType === unknownType) {
return;
}
if (!isValidBaseType(baseType)) {
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;
}
type.resolvedBaseTypes = [baseType];
}
function areAllOuterTypeParametersApplied(type) {
var outerTypeParameters = type.outerTypeParameters;
if (outerTypeParameters) {
var last_1 = outerTypeParameters.length - 1;
var typeArguments = type.typeArguments;
return outerTypeParameters[last_1].symbol !== typeArguments[last_1].symbol;
}
return true;
}
function isValidBaseType(type) {
return type.flags & (32768 | 16777216 | 1) && !isGenericMappedType(type) ||
type.flags & 131072 && !ts.forEach(type.types, function (t) { return !isValidBaseType(t); });
}
function resolveBaseTypesOfInterface(type) {
type.resolvedBaseTypes = type.resolvedBaseTypes || ts.emptyArray;
for (var _i = 0, _a = type.symbol.declarations; _i < _a.length; _i++) {
var declaration = _a[_i];
if (declaration.kind === 230 && 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 (isValidBaseType(baseType)) {
if (type !== baseType && !hasBaseType(baseType, type)) {
if (type.resolvedBaseTypes === ts.emptyArray) {
type.resolvedBaseTypes = [baseType];
}
else {
type.resolvedBaseTypes.push(baseType);
}
}
else {
error(declaration, ts.Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, undefined, 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 === 230) {
if (declaration.flags & 64) {
return false;
}
var baseTypeNodes = ts.getInterfaceBaseTypeNodes(declaration);
if (baseTypeNodes) {
for (var _b = 0, baseTypeNodes_1 = baseTypeNodes; _b < baseTypeNodes_1.length; _b++) {
var node = baseTypeNodes_1[_b];
if (ts.isEntityNameExpression(node.expression)) {
var baseSymbol = resolveEntityName(node.expression, 793064, true);
if (!baseSymbol || !(baseSymbol.flags & 64) || getDeclaredTypeOfClassOrInterface(baseSymbol).thisType) {
return false;
}
}
}
}
}
}
return true;
}
function getDeclaredTypeOfClassOrInterface(symbol) {
var links = getSymbolLinks(symbol);
if (!links.declaredType) {
var kind = symbol.flags & 32 ? 1 : 2;
var type = links.declaredType = createObjectType(kind, symbol);
var outerTypeParameters = getOuterTypeParametersOfClassOrInterface(symbol);
var localTypeParameters = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol);
if (outerTypeParameters || localTypeParameters || kind === 1 || !isIndependentInterface(symbol)) {
type.objectFlags |= 4;
type.typeParameters = ts.concatenate(outerTypeParameters, localTypeParameters);
type.outerTypeParameters = outerTypeParameters;
type.localTypeParameters = localTypeParameters;
type.instantiations = ts.createMap();
type.instantiations.set(getTypeListId(type.typeParameters), type);
type.target = type;
type.typeArguments = type.typeParameters;
type.thisType = createType(16384);
type.thisType.isThisType = true;
type.thisType.symbol = symbol;
type.thisType.constraint = type;
}
}
return links.declaredType;
}
function getDeclaredTypeOfTypeAlias(symbol) {
var links = getSymbolLinks(symbol);
if (!links.declaredType) {
if (!pushTypeResolution(symbol, 2)) {
return unknownType;
}
var declaration = ts.find(symbol.declarations, function (d) {
return d.kind === 283 || d.kind === 231;
});
var typeNode = declaration.kind === 283 ? declaration.typeExpression : declaration.type;
var type = typeNode ? getTypeFromTypeNode(typeNode) : unknownType;
if (popTypeResolution()) {
var typeParameters = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol);
if (typeParameters) {
links.typeParameters = typeParameters;
links.instantiations = ts.createMap();
links.instantiations.set(getTypeListId(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 isLiteralEnumMember(member) {
var expr = member.initializer;
if (!expr) {
return !ts.isInAmbientContext(member);
}
switch (expr.kind) {
case 9:
case 8:
return true;
case 192:
return expr.operator === 38 &&
expr.operand.kind === 8;
case 71:
return ts.nodeIsMissing(expr) || !!getSymbolOfNode(member.parent).exports.get(expr.escapedText);
default:
return false;
}
}
function getEnumKind(symbol) {
var links = getSymbolLinks(symbol);
if (links.enumKind !== undefined) {
return links.enumKind;
}
var hasNonLiteralMember = false;
for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
var declaration = _a[_i];
if (declaration.kind === 232) {
for (var _b = 0, _c = declaration.members; _b < _c.length; _b++) {
var member = _c[_b];
if (member.initializer && member.initializer.kind === 9) {
return links.enumKind = 1;
}
if (!isLiteralEnumMember(member)) {
hasNonLiteralMember = true;
}
}
}
}
return links.enumKind = hasNonLiteralMember ? 0 : 1;
}
function getBaseTypeOfEnumLiteralType(type) {
return type.flags & 256 && !(type.flags & 65536) ? getDeclaredTypeOfSymbol(getParentOfSymbol(type.symbol)) : type;
}
function getDeclaredTypeOfEnum(symbol) {
var links = getSymbolLinks(symbol);
if (links.declaredType) {
return links.declaredType;
}
if (getEnumKind(symbol) === 1) {
enumCount++;
var memberTypeList = [];
for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
var declaration = _a[_i];
if (declaration.kind === 232) {
for (var _b = 0, _c = declaration.members; _b < _c.length; _b++) {
var member = _c[_b];
var memberType = getLiteralType(getEnumMemberValue(member), enumCount, getSymbolOfNode(member));
getSymbolLinks(getSymbolOfNode(member)).declaredType = memberType;
memberTypeList.push(memberType);
}
}
}
if (memberTypeList.length) {
var enumType_1 = getUnionType(memberTypeList, false, symbol, undefined);
if (enumType_1.flags & 65536) {
enumType_1.flags |= 256;
enumType_1.symbol = symbol;
}
return links.declaredType = enumType_1;
}
}
var enumType = createType(16);
enumType.symbol = symbol;
return links.declaredType = enumType;
}
function getDeclaredTypeOfEnumMember(symbol) {
var links = getSymbolLinks(symbol);
if (!links.declaredType) {
var enumType = getDeclaredTypeOfEnum(getParentOfSymbol(symbol));
if (!links.declaredType) {
links.declaredType = enumType;
}
}
return links.declaredType;
}
function getDeclaredTypeOfTypeParameter(symbol) {
var links = getSymbolLinks(symbol);
if (!links.declaredType) {
var type = createType(16384);
type.symbol = symbol;
links.declaredType = type;
}
return links.declaredType;
}
function getDeclaredTypeOfAlias(symbol) {
var links = getSymbolLinks(symbol);
if (!links.declaredType) {
links.declaredType = getDeclaredTypeOfSymbol(resolveAlias(symbol));
}
return links.declaredType;
}
function getDeclaredTypeOfSymbol(symbol) {
return tryGetDeclaredTypeOfSymbol(symbol) || unknownType;
}
function tryGetDeclaredTypeOfSymbol(symbol) {
if (symbol.flags & (32 | 64)) {
return getDeclaredTypeOfClassOrInterface(symbol);
}
if (symbol.flags & 524288) {
return getDeclaredTypeOfTypeAlias(symbol);
}
if (symbol.flags & 262144) {
return getDeclaredTypeOfTypeParameter(symbol);
}
if (symbol.flags & 384) {
return getDeclaredTypeOfEnum(symbol);
}
if (symbol.flags & 8) {
return getDeclaredTypeOfEnumMember(symbol);
}
if (symbol.flags & 2097152) {
return getDeclaredTypeOfAlias(symbol);
}
return undefined;
}
function 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 119:
case 136:
case 133:
case 122:
case 137:
case 134:
case 105:
case 139:
case 95:
case 130:
case 173:
return true;
case 164:
return isIndependentType(node.elementType);
case 159:
return isIndependentTypeReference(node);
}
return false;
}
function isIndependentVariableLikeDeclaration(node) {
var typeNode = ts.getEffectiveTypeAnnotationNode(node);
return typeNode ? isIndependentType(typeNode) : !node.initializer;
}
function isIndependentFunctionLikeDeclaration(node) {
if (node.kind !== 152) {
var typeNode = ts.getEffectiveReturnTypeNode(node);
if (!typeNode || !isIndependentType(typeNode)) {
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 149:
case 148:
return isIndependentVariableLikeDeclaration(declaration);
case 151:
case 150:
case 152:
return isIndependentFunctionLikeDeclaration(declaration);
}
}
}
return false;
}
function createInstantiatedSymbolTable(symbols, mapper, mappingThisOnly) {
var result = ts.createSymbolTable();
for (var _i = 0, symbols_2 = symbols; _i < symbols_2.length; _i++) {
var symbol = symbols_2[_i];
result.set(symbol.escapedName, mappingThisOnly && 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 (!symbols.has(s.escapedName)) {
symbols.set(s.escapedName, s);
}
}
}
function resolveDeclaredMembers(type) {
if (!type.declaredProperties) {
var symbol = type.symbol;
type.declaredProperties = getNamedMembers(symbol.members);
type.declaredCallSignatures = getSignaturesOfSymbol(symbol.members.get("__call"));
type.declaredConstructSignatures = getSignaturesOfSymbol(symbol.members.get("__new"));
type.declaredStringIndexInfo = getIndexInfoOfSymbol(symbol, 0);
type.declaredNumberIndexInfo = getIndexInfoOfSymbol(symbol, 1);
}
return type;
}
function getTypeWithThisArgument(type, thisArgument) {
if (getObjectFlags(type) & 4) {
var target = type.target;
var typeArguments = type.typeArguments;
if (ts.length(target.typeParameters) === ts.length(typeArguments)) {
return createTypeReference(target, ts.concatenate(typeArguments, [thisArgument || target.thisType]));
}
}
else if (type.flags & 131072) {
return getIntersectionType(ts.map(type.types, function (t) { return getTypeWithThisArgument(t, thisArgument); }));
}
return type;
}
function resolveObjectTypeMembers(type, source, typeParameters, typeArguments) {
var mapper;
var members;
var callSignatures;
var constructSignatures;
var stringIndexInfo;
var numberIndexInfo;
if (ts.rangeEquals(typeParameters, typeArguments, 0, typeParameters.length)) {
mapper = identityMapper;
members = source.symbol ? source.symbol.members : ts.createSymbolTable(source.declaredProperties);
callSignatures = source.declaredCallSignatures;
constructSignatures = source.declaredConstructSignatures;
stringIndexInfo = source.declaredStringIndexInfo;
numberIndexInfo = source.declaredNumberIndexInfo;
}
else {
mapper = createTypeMapper(typeParameters, typeArguments);
members = createInstantiatedSymbolTable(source.declaredProperties, mapper, typeParameters.length === 1);
callSignatures = instantiateSignatures(source.declaredCallSignatures, mapper);
constructSignatures = instantiateSignatures(source.declaredConstructSignatures, mapper);
stringIndexInfo = instantiateIndexInfo(source.declaredStringIndexInfo, mapper);
numberIndexInfo = instantiateIndexInfo(source.declaredNumberIndexInfo, mapper);
}
var baseTypes = getBaseTypes(source);
if (baseTypes.length) {
if (source.symbol && members === source.symbol.members) {
members = ts.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, getPropertiesOfType(instantiatedBaseType));
callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(instantiatedBaseType, 0));
constructSignatures = ts.concatenate(constructSignatures, getSignaturesOfType(instantiatedBaseType, 1));
if (!stringIndexInfo) {
stringIndexInfo = instantiatedBaseType === anyType ?
createIndexInfo(anyType, false) :
getIndexInfoOfType(instantiatedBaseType, 0);
}
numberIndexInfo = numberIndexInfo || getIndexInfoOfType(instantiatedBaseType, 1);
}
}
setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
}
function resolveClassOrInterfaceMembers(type) {
resolveObjectTypeMembers(type, resolveDeclaredMembers(type), ts.emptyArray, ts.emptyArray);
}
function resolveTypeReferenceMembers(type) {
var source = resolveDeclaredMembers(type.target);
var typeParameters = ts.concatenate(source.typeParameters, [source.thisType]);
var typeArguments = type.typeArguments && type.typeArguments.length === typeParameters.length ?
type.typeArguments : ts.concatenate(type.typeArguments, [type]);
resolveObjectTypeMembers(type, source, typeParameters, typeArguments);
}
function createSignature(declaration, typeParameters, thisParameter, parameters, resolvedReturnType, typePredicate, minArgumentCount, hasRestParameter, hasLiteralTypes) {
var sig = new Signature(checker);
sig.declaration = declaration;
sig.typeParameters = typeParameters;
sig.parameters = parameters;
sig.thisParameter = thisParameter;
sig.resolvedReturnType = resolvedReturnType;
sig.typePredicate = typePredicate;
sig.minArgumentCount = minArgumentCount;
sig.hasRestParameter = hasRestParameter;
sig.hasLiteralTypes = hasLiteralTypes;
return sig;
}
function cloneSignature(sig) {
return createSignature(sig.declaration, sig.typeParameters, sig.thisParameter, sig.parameters, sig.resolvedReturnType, sig.typePredicate, sig.minArgumentCount, sig.hasRestParameter, sig.hasLiteralTypes);
}
function getDefaultConstructSignatures(classType) {
var baseConstructorType = getBaseConstructorTypeOfClass(classType);
var baseSignatures = getSignaturesOfType(baseConstructorType, 1);
if (baseSignatures.length === 0) {
return [createSignature(undefined, classType.localTypeParameters, undefined, ts.emptyArray, classType, undefined, 0, false, false)];
}
var baseTypeNode = getBaseTypeNodeOfClass(classType);
var isJavaScript = ts.isInJavaScriptFile(baseTypeNode);
var typeArguments = typeArgumentsFromTypeReferenceNode(baseTypeNode);
var typeArgCount = ts.length(typeArguments);
var result = [];
for (var _i = 0, baseSignatures_1 = baseSignatures; _i < baseSignatures_1.length; _i++) {
var baseSig = baseSignatures_1[_i];
var minTypeArgumentCount = getMinTypeArgumentCount(baseSig.typeParameters);
var typeParamCount = ts.length(baseSig.typeParameters);
if ((isJavaScript || typeArgCount >= minTypeArgumentCount) && typeArgCount <= typeParamCount) {
var sig = typeParamCount ? createSignatureInstantiation(baseSig, fillMissingTypeArguments(typeArguments, baseSig.typeParameters, minTypeArgumentCount, isJavaScript)) : cloneSignature(baseSig);
sig.typeParameters = classType.localTypeParameters;
sig.resolvedReturnType = classType;
result.push(sig);
}
}
return result;
}
function findMatchingSignature(signatureList, signature, partialMatch, ignoreThisTypes, ignoreReturnTypes) {
for (var _i = 0, signatureList_1 = signatureList; _i < signatureList_1.length; _i++) {
var s = signatureList_1[_i];
if (compareSignaturesIdentical(s, signature, partialMatch, ignoreThisTypes, ignoreReturnTypes, compareTypesIdentical)) {
return s;
}
}
}
function findMatchingSignatures(signatureLists, signature, listIndex) {
if (signature.typeParameters) {
if (listIndex > 0) {
return undefined;
}
for (var i = 1; i < signatureLists.length; i++) {
if (!findMatchingSignature(signatureLists[i], signature, false, false, false)) {
return undefined;
}
}
return [signature];
}
var result = 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;
}
result = ts.appendIfUnique(result, 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.thisParameter; })) {
var thisType = getUnionType(ts.map(unionSignatures, function (sig) { return getTypeOfSymbol(sig.thisParameter) || anyType; }), true);
s.thisParameter = createSymbolWithType(signature.thisParameter, thisType);
}
s.resolvedReturnType = undefined;
s.unionSignatures = unionSignatures;
}
(result || (result = [])).push(s);
}
}
}
}
return result || ts.emptyArray;
}
function getUnionIndexInfo(types, kind) {
var indexTypes = [];
var isAnyReadonly = false;
for (var _i = 0, types_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, true), isAnyReadonly);
}
function resolveUnionTypeMembers(type) {
var callSignatures = getUnionSignatures(type.types, 0);
var constructSignatures = getUnionSignatures(type.types, 1);
var stringIndexInfo = getUnionIndexInfo(type.types, 0);
var numberIndexInfo = getUnionIndexInfo(type.types, 1);
setStructuredTypeMembers(type, emptySymbols, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
}
function intersectTypes(type1, type2) {
return !type1 ? type2 : !type2 ? type1 : getIntersectionType([type1, type2]);
}
function intersectIndexInfos(info1, info2) {
return !info1 ? info2 : !info2 ? info1 : createIndexInfo(getIntersectionType([info1.type, info2.type]), info1.isReadonly && info2.isReadonly);
}
function unionSpreadIndexInfos(info1, info2) {
return info1 && info2 && createIndexInfo(getUnionType([info1.type, info2.type]), info1.isReadonly || info2.isReadonly);
}
function includeMixinType(type, types, index) {
var mixedTypes = [];
for (var i = 0; i < types.length; i++) {
if (i === index) {
mixedTypes.push(type);
}
else if (isMixinConstructorType(types[i])) {
mixedTypes.push(getReturnTypeOfSignature(getSignaturesOfType(types[i], 1)[0]));
}
}
return getIntersectionType(mixedTypes);
}
function resolveIntersectionTypeMembers(type) {
var callSignatures = ts.emptyArray;
var constructSignatures = ts.emptyArray;
var stringIndexInfo;
var numberIndexInfo;
var types = type.types;
var mixinCount = ts.countWhere(types, isMixinConstructorType);
var _loop_3 = function (i) {
var t = type.types[i];
if (mixinCount === 0 || mixinCount === types.length && i === 0 || !isMixinConstructorType(t)) {
var signatures = getSignaturesOfType(t, 1);
if (signatures.length && mixinCount > 0) {
signatures = ts.map(signatures, function (s) {
var clone = cloneSignature(s);
clone.resolvedReturnType = includeMixinType(getReturnTypeOfSignature(s), types, i);
return clone;
});
}
constructSignatures = ts.concatenate(constructSignatures, signatures);
}
callSignatures = ts.concatenate(callSignatures, getSignaturesOfType(t, 0));
stringIndexInfo = intersectIndexInfos(stringIndexInfo, getIndexInfoOfType(t, 0));
numberIndexInfo = intersectIndexInfos(numberIndexInfo, getIndexInfoOfType(t, 1));
};
for (var i = 0; i < types.length; i++) {
_loop_3(i);
}
setStructuredTypeMembers(type, emptySymbols, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
}
function resolveAnonymousTypeMembers(type) {
var symbol = type.symbol;
if (type.target) {
var members = createInstantiatedSymbolTable(getPropertiesOfObjectType(type.target), type.mapper, false);
var callSignatures = instantiateSignatures(getSignaturesOfType(type.target, 0), type.mapper);
var constructSignatures = instantiateSignatures(getSignaturesOfType(type.target, 1), type.mapper);
var stringIndexInfo = instantiateIndexInfo(getIndexInfoOfType(type.target, 0), type.mapper);
var numberIndexInfo = instantiateIndexInfo(getIndexInfoOfType(type.target, 1), type.mapper);
setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
}
else if (symbol.flags & 2048) {
var members = symbol.members;
var callSignatures = getSignaturesOfSymbol(members.get("__call"));
var constructSignatures = getSignaturesOfSymbol(members.get("__new"));
var stringIndexInfo = getIndexInfoOfSymbol(symbol, 0);
var numberIndexInfo = getIndexInfoOfSymbol(symbol, 1);
setStructuredTypeMembers(type, members, callSignatures, constructSignatures, stringIndexInfo, numberIndexInfo);
}
else {
var members = emptySymbols;
var stringIndexInfo = undefined;
if (symbol.exports) {
members = getExportsOfSymbol(symbol);
}
if (symbol.flags & 32) {
var classType = getDeclaredTypeOfClassOrInterface(symbol);
var baseConstructorType = getBaseConstructorTypeOfClass(classType);
if (baseConstructorType.flags & (32768 | 131072 | 540672)) {
members = ts.createSymbolTable(getNamedMembers(members));
addInheritedMembers(members, getPropertiesOfType(baseConstructorType));
}
else if (baseConstructorType === anyType) {
stringIndexInfo = createIndexInfo(anyType, false);
}
}
var numberIndexInfo = symbol.flags & 384 ? enumNumberIndexInfo : undefined;
setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, numberIndexInfo);
if (symbol.flags & (16 | 8192)) {
type.callSignatures = getSignaturesOfSymbol(symbol);
}
if (symbol.flags & 32) {
var classType = getDeclaredTypeOfClassOrInterface(symbol);
var constructSignatures = getSignaturesOfSymbol(symbol.members.get("__constructor"));
if (!constructSignatures.length) {
constructSignatures = getDefaultConstructSignatures(classType);
}
type.constructSignatures = constructSignatures;
}
}
}
function resolveMappedTypeMembers(type) {
var members = ts.createSymbolTable();
var stringIndexInfo;
setStructuredTypeMembers(type, emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
var typeParameter = getTypeParameterFromMappedType(type);
var constraintType = getConstraintTypeFromMappedType(type);
var templateType = getTemplateTypeFromMappedType(type);
var modifiersType = getApparentType(getModifiersTypeFromMappedType(type));
var templateReadonly = !!type.declaration.readonlyToken;
var templateOptional = !!type.declaration.questionToken;
if (type.declaration.typeParameter.constraint.kind === 170) {
for (var _i = 0, _a = getPropertiesOfType(modifiersType); _i < _a.length; _i++) {
var propertySymbol = _a[_i];
addMemberForKeyType(getLiteralTypeFromPropertyName(propertySymbol), propertySymbol);
}
if (modifiersType.flags & 1 || getIndexInfoOfType(modifiersType, 0)) {
addMemberForKeyType(stringType);
}
}
else {
var keyType = constraintType.flags & 540672 ? getApparentType(constraintType) : constraintType;
var iterationType = keyType.flags & 262144 ? getIndexType(getApparentType(keyType.type)) : keyType;
forEachType(iterationType, addMemberForKeyType);
}
setStructuredTypeMembers(type, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, undefined);
function addMemberForKeyType(t, propertySymbolOrIndex) {
var propertySymbol;
if (typeof propertySymbolOrIndex === "object") {
propertySymbol = propertySymbolOrIndex;
}
var iterationMapper = createTypeMapper([typeParameter], [t]);
var templateMapper = type.mapper ? combineTypeMappers(type.mapper, iterationMapper) : iterationMapper;
var propType = instantiateType(templateType, templateMapper);
if (t.flags & 32) {
var propName = ts.escapeLeadingUnderscores(t.value);
var modifiersProp = getPropertyOfType(modifiersType, propName);
var isOptional = templateOptional || !!(modifiersProp && modifiersProp.flags & 16777216);
var prop = createSymbol(4 | (isOptional ? 16777216 : 0), propName);
prop.checkFlags = templateReadonly || modifiersProp && isReadonlySymbol(modifiersProp) ? 8 : 0;
prop.type = propType;
if (propertySymbol) {
prop.syntheticOrigin = propertySymbol;
prop.declarations = propertySymbol.declarations;
}
prop.syntheticLiteralTypeOrigin = t;
members.set(propName, prop);
}
else if (t.flags & (1 | 2)) {
stringIndexInfo = createIndexInfo(propType, templateReadonly);
}
}
}
function getTypeParameterFromMappedType(type) {
return type.typeParameter ||
(type.typeParameter = getDeclaredTypeOfTypeParameter(getSymbolOfNode(type.declaration.typeParameter)));
}
function getConstraintTypeFromMappedType(type) {
return type.constraintType ||
(type.constraintType = instantiateType(getConstraintOfTypeParameter(getTypeParameterFromMappedType(type)), type.mapper || identityMapper) || unknownType);
}
function getTemplateTypeFromMappedType(type) {
return type.templateType ||
(type.templateType = type.declaration.type ?
instantiateType(addOptionality(getTypeFromTypeNode(type.declaration.type), !!type.declaration.questionToken), type.mapper || identityMapper) :
unknownType);
}
function getModifiersTypeFromMappedType(type) {
if (!type.modifiersType) {
var constraintDeclaration = type.declaration.typeParameter.constraint;
if (constraintDeclaration.kind === 170) {
type.modifiersType = instantiateType(getTypeFromTypeNode(constraintDeclaration.type), type.mapper || identityMapper);
}
else {
var declaredType = getTypeFromMappedTypeNode(type.declaration);
var constraint = getConstraintTypeFromMappedType(declaredType);
var extendedConstraint = constraint && constraint.flags & 16384 ? getConstraintOfTypeParameter(constraint) : constraint;
type.modifiersType = extendedConstraint && extendedConstraint.flags & 262144 ? instantiateType(extendedConstraint.type, type.mapper || identityMapper) : emptyObjectType;
}
}
return type.modifiersType;
}
function isPartialMappedType(type) {
return getObjectFlags(type) & 32 && !!type.declaration.questionToken;
}
function isGenericMappedType(type) {
return getObjectFlags(type) & 32 && isGenericIndexType(getConstraintTypeFromMappedType(type));
}
function resolveStructuredTypeMembers(type) {
if (!type.members) {
if (type.flags & 32768) {
if (type.objectFlags & 4) {
resolveTypeReferenceMembers(type);
}
else if (type.objectFlags & 3) {
resolveClassOrInterfaceMembers(type);
}
else if (type.objectFlags & 16) {
resolveAnonymousTypeMembers(type);
}
else if (type.objectFlags & 32) {
resolveMappedTypeMembers(type);
}
}
else if (type.flags & 65536) {
resolveUnionTypeMembers(type);
}
else if (type.flags & 131072) {
resolveIntersectionTypeMembers(type);
}
}
return type;
}
function getPropertiesOfObjectType(type) {
if (type.flags & 32768) {
return resolveStructuredTypeMembers(type).properties;
}
return ts.emptyArray;
}
function getPropertyOfObjectType(type, name) {
if (type.flags & 32768) {
var resolved = resolveStructuredTypeMembers(type);
var symbol = resolved.members.get(name);
if (symbol && symbolIsValue(symbol)) {
return symbol;
}
}
}
function getPropertiesOfUnionOrIntersectionType(type) {
if (!type.resolvedProperties) {
var members = ts.createSymbolTable();
for (var _i = 0, _a = type.types; _i < _a.length; _i++) {
var current = _a[_i];
for (var _b = 0, _c = getPropertiesOfType(current); _b < _c.length; _b++) {
var prop = _c[_b];
if (!members.has(prop.escapedName)) {
var combinedProp = getPropertyOfUnionOrIntersectionType(type, prop.escapedName);
if (combinedProp) {
members.set(prop.escapedName, combinedProp);
}
}
}
if (type.flags & 65536) {
break;
}
}
type.resolvedProperties = getNamedMembers(members);
}
return type.resolvedProperties;
}
function getPropertiesOfType(type) {
type = getApparentType(type);
return type.flags & 196608 ?
getPropertiesOfUnionOrIntersectionType(type) :
getPropertiesOfObjectType(type);
}
function getAllPossiblePropertiesOfTypes(types) {
var unionType = getUnionType(types);
if (!(unionType.flags & 65536)) {
return getPropertiesOfType(unionType);
}
var props = ts.createSymbolTable();
for (var _i = 0, types_2 = types; _i < types_2.length; _i++) {
var memberType = types_2[_i];
for (var _a = 0, _b = getPropertiesOfType(memberType); _a < _b.length; _a++) {
var escapedName = _b[_a].escapedName;
if (!props.has(escapedName)) {
props.set(escapedName, createUnionOrIntersectionProperty(unionType, escapedName));
}
}
}
return ts.arrayFrom(props.values());
}
function getConstraintOfType(type) {
return type.flags & 16384 ? getConstraintOfTypeParameter(type) :
type.flags & 524288 ? getConstraintOfIndexedAccess(type) :
getBaseConstraintOfType(type);
}
function getConstraintOfTypeParameter(typeParameter) {
return hasNonCircularBaseConstraint(typeParameter) ? getConstraintFromTypeParameter(typeParameter) : undefined;
}
function getConstraintOfIndexedAccess(type) {
var transformed = getTransformedIndexedAccessType(type);
if (transformed) {
return transformed;
}
var baseObjectType = getBaseConstraintOfType(type.objectType);
var baseIndexType = getBaseConstraintOfType(type.indexType);
return baseObjectType || baseIndexType ? getIndexedAccessType(baseObjectType || type.objectType, baseIndexType || type.indexType) : undefined;
}
function getBaseConstraintOfType(type) {
if (type.flags & (540672 | 196608)) {
var constraint = getResolvedBaseConstraint(type);
if (constraint !== noConstraintType && constraint !== circularConstraintType) {
return constraint;
}
}
else if (type.flags & 262144) {
return stringType;
}
return undefined;
}
function hasNonCircularBaseConstraint(type) {
return getResolvedBaseConstraint(type) !== circularConstraintType;
}
function getResolvedBaseConstraint(type) {
var typeStack;
var circular;
if (!type.resolvedBaseConstraint) {
typeStack = [];
var constraint = getBaseConstraint(type);
type.resolvedBaseConstraint = circular ? circularConstraintType : getTypeWithThisArgument(constraint || noConstraintType, type);
}
return type.resolvedBaseConstraint;
function getBaseConstraint(t) {
if (ts.contains(typeStack, t)) {
circular = true;
return undefined;
}
typeStack.push(t);
var result = computeBaseConstraint(t);
typeStack.pop();
return result;
}
function computeBaseConstraint(t) {
if (t.flags & 16384) {
var constraint = getConstraintFromTypeParameter(t);
return t.isThisType ? constraint :
constraint ? getBaseConstraint(constraint) : undefined;
}
if (t.flags & 196608) {
var types = t.types;
var baseTypes = [];
for (var _i = 0, types_3 = types; _i < types_3.length; _i++) {
var type_2 = types_3[_i];
var baseType = getBaseConstraint(type_2);
if (baseType) {
baseTypes.push(baseType);
}
}
return t.flags & 65536 && baseTypes.length === types.length ? getUnionType(baseTypes) :
t.flags & 131072 && baseTypes.length ? getIntersectionType(baseTypes) :
undefined;
}
if (t.flags & 262144) {
return stringType;
}
if (t.flags & 524288) {
var transformed = getTransformedIndexedAccessType(t);
if (transformed) {
return getBaseConstraint(transformed);
}
var baseObjectType = getBaseConstraint(t.objectType);
var baseIndexType = getBaseConstraint(t.indexType);
var baseIndexedAccess = baseObjectType && baseIndexType ? getIndexedAccessType(baseObjectType, baseIndexType) : undefined;
return baseIndexedAccess && baseIndexedAccess !== unknownType ? getBaseConstraint(baseIndexedAccess) : undefined;
}
if (isGenericMappedType(t)) {
return emptyObjectType;
}
return t;
}
}
function getApparentTypeOfIntersectionType(type) {
return type.resolvedApparentType || (type.resolvedApparentType = getTypeWithThisArgument(type, type));
}
function getResolvedTypeParameterDefault(typeParameter) {
if (!typeParameter.default) {
if (typeParameter.target) {
var targetDefault = getResolvedTypeParameterDefault(typeParameter.target);
typeParameter.default = targetDefault ? instantiateType(targetDefault, typeParameter.mapper) : noConstraintType;
}
else {
typeParameter.default = resolvingDefaultType;
var defaultDeclaration = typeParameter.symbol && ts.forEach(typeParameter.symbol.declarations, function (decl) { return ts.isTypeParameterDeclaration(decl) && decl.default; });
var defaultType = defaultDeclaration ? getTypeFromTypeNode(defaultDeclaration) : noConstraintType;
if (typeParameter.default === resolvingDefaultType) {
typeParameter.default = defaultType;
}
}
}
else if (typeParameter.default === resolvingDefaultType) {
typeParameter.default = circularConstraintType;
}
return typeParameter.default;
}
function getDefaultFromTypeParameter(typeParameter) {
var defaultType = getResolvedTypeParameterDefault(typeParameter);
return defaultType !== noConstraintType && defaultType !== circularConstraintType ? defaultType : undefined;
}
function hasNonCircularTypeParameterDefault(typeParameter) {
return getResolvedTypeParameterDefault(typeParameter) !== circularConstraintType;
}
function hasTypeParameterDefault(typeParameter) {
return !!(typeParameter.symbol && ts.forEach(typeParameter.symbol.declarations, function (decl) { return ts.isTypeParameterDeclaration(decl) && decl.default; }));
}
function getApparentType(type) {
var t = type.flags & 540672 ? getBaseConstraintOfType(type) || emptyObjectType : type;
return t.flags & 131072 ? getApparentTypeOfIntersectionType(t) :
t.flags & 262178 ? globalStringType :
t.flags & 84 ? globalNumberType :
t.flags & 136 ? globalBooleanType :
t.flags & 512 ? getGlobalESSymbolType(languageVersion >= 2) :
t.flags & 16777216 ? emptyObjectType :
t;
}
function createUnionOrIntersectionProperty(containingType, name) {
var props;
var types = containingType.types;
var isUnion = containingType.flags & 65536;
var excludeModifiers = isUnion ? 24 : 0;
var commonFlags = isUnion ? 0 : 16777216;
var syntheticFlag = 4;
var checkFlags = 0;
for (var _i = 0, types_4 = types; _i < types_4.length; _i++) {
var current = types_4[_i];
var type = getApparentType(current);
if (type !== unknownType) {
var prop = getPropertyOfType(type, name);
var modifiers = prop ? ts.getDeclarationModifierFlagsFromSymbol(prop) : 0;
if (prop && !(modifiers & excludeModifiers)) {
commonFlags &= prop.flags;
props = ts.appendIfUnique(props, prop);
checkFlags |= (isReadonlySymbol(prop) ? 8 : 0) |
(!(modifiers & 24) ? 64 : 0) |
(modifiers & 16 ? 128 : 0) |
(modifiers & 8 ? 256 : 0) |
(modifiers & 32 ? 512 : 0);
if (!isMethodLike(prop)) {
syntheticFlag = 2;
}
}
else if (isUnion) {
checkFlags |= 16;
}
}
}
if (!props) {
return undefined;
}
if (props.length === 1 && !(checkFlags & 16)) {
return props[0];
}
var propTypes = [];
var declarations = [];
var commonType = undefined;
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);
}
var type = getTypeOfSymbol(prop);
if (!commonType) {
commonType = type;
}
else if (type !== commonType) {
checkFlags |= 32;
}
propTypes.push(type);
}
var result = createSymbol(4 | commonFlags, name);
result.checkFlags = syntheticFlag | checkFlags;
result.containingType = containingType;
result.declarations = declarations;
result.type = isUnion ? getUnionType(propTypes) : getIntersectionType(propTypes);
return result;
}
function getUnionOrIntersectionProperty(type, name) {
var properties = type.propertyCache || (type.propertyCache = ts.createSymbolTable());
var property = properties.get(name);
if (!property) {
property = createUnionOrIntersectionProperty(type, name);
if (property) {
properties.set(name, property);
}
}
return property;
}
function getPropertyOfUnionOrIntersectionType(type, name) {
var property = getUnionOrIntersectionProperty(type, name);
return property && !(ts.getCheckFlags(property) & 16) ? property : undefined;
}
function getPropertyOfType(type, name) {
type = getApparentType(type);
if (type.flags & 32768) {
var resolved = resolveStructuredTypeMembers(type);
var symbol = resolved.members.get(name);
if (symbol && symbolIsValue(symbol)) {
return symbol;
}
if (resolved === anyFunctionType || resolved.callSignatures.length || resolved.constructSignatures.length) {
var symbol_1 = getPropertyOfObjectType(globalFunctionType, name);
if (symbol_1) {
return symbol_1;
}
}
return getPropertyOfObjectType(globalObjectType, name);
}
if (type.flags & 196608) {
return getPropertyOfUnionOrIntersectionType(type, name);
}
return undefined;
}
function getSignaturesOfStructuredType(type, kind) {
if (type.flags & 229376) {
var resolved = resolveStructuredTypeMembers(type);
return kind === 0 ? resolved.callSignatures : resolved.constructSignatures;
}
return ts.emptyArray;
}
function getSignaturesOfType(type, kind) {
return getSignaturesOfStructuredType(getApparentType(type), kind);
}
function getIndexInfoOfStructuredType(type, kind) {
if (type.flags & 229376) {
var resolved = resolveStructuredTypeMembers(type);
return kind === 0 ? resolved.stringIndexInfo : resolved.numberIndexInfo;
}
}
function getIndexTypeOfStructuredType(type, kind) {
var info = getIndexInfoOfStructuredType(type, kind);
return info && info.type;
}
function getIndexInfoOfType(type, kind) {
return getIndexInfoOfStructuredType(getApparentType(type), kind);
}
function getIndexTypeOfType(type, kind) {
return getIndexTypeOfStructuredType(getApparentType(type), kind);
}
function getImplicitIndexTypeOfType(type, kind) {
if (isObjectTypeWithInferableIndex(type)) {
var propTypes = [];
for (var _i = 0, _a = getPropertiesOfType(type); _i < _a.length; _i++) {
var prop = _a[_i];
if (kind === 0 || isNumericLiteralName(prop.escapedName)) {
propTypes.push(getTypeOfSymbol(prop));
}
}
if (propTypes.length) {
return getUnionType(propTypes, true);
}
}
return undefined;
}
function getTypeParametersFromDeclaration(declaration) {
var result;
ts.forEach(ts.getEffectiveTypeParameterDeclarations(declaration), function (node) {
var tp = getDeclaredTypeOfTypeParameter(node.symbol);
result = ts.appendIfUnique(result, tp);
});
return result;
}
function symbolsToArray(symbols) {
var result = [];
symbols.forEach(function (symbol, id) {
if (!isReservedMemberName(id)) {
result.push(symbol);
}
});
return result;
}
function isJSDocOptionalParameter(node) {
if (ts.isInJavaScriptFile(node)) {
if (node.type && node.type.kind === 272) {
return true;
}
var paramTags = ts.getJSDocParameterTags(node);
if (paramTags) {
for (var _i = 0, paramTags_1 = paramTags; _i < paramTags_1.length; _i++) {
var paramTag = paramTags_1[_i];
if (paramTag.isBracketed) {
return true;
}
if (paramTag.typeExpression) {
return paramTag.typeExpression.type.kind === 272;
}
}
}
}
}
function tryFindAmbientModule(moduleName, withAugmentations) {
if (ts.isExternalModuleNameRelative(moduleName)) {
return undefined;
}
var symbol = getSymbol(globals, '"' + moduleName + '"', 512);
return symbol && withAugmentations ? getMergedSymbol(symbol) : symbol;
}
function isOptionalParameter(node) {
if (ts.hasQuestionToken(node) || isJSDocOptionalParameter(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;
}
var iife = ts.getImmediatelyInvokedFunctionExpression(node.parent);
if (iife) {
return !node.type &&
!node.dotDotDotToken &&
ts.indexOf(node.parent.parameters, node) >= iife.arguments.length;
}
return false;
}
function createTypePredicateFromTypePredicateNode(node) {
var parameterName = node.parameterName;
if (parameterName.kind === 71) {
return {
kind: 1,
parameterName: parameterName ? parameterName.escapedText : undefined,
parameterIndex: parameterName ? getTypePredicateParameterIndex(node.parent.parameters, parameterName) : undefined,
type: getTypeFromTypeNode(node.type)
};
}
else {
return {
kind: 0,
type: getTypeFromTypeNode(node.type)
};
}
}
function getMinTypeArgumentCount(typeParameters) {
var minTypeArgumentCount = 0;
if (typeParameters) {
for (var i = 0; i < typeParameters.length; i++) {
if (!hasTypeParameterDefault(typeParameters[i])) {
minTypeArgumentCount = i + 1;
}
}
}
return minTypeArgumentCount;
}
function fillMissingTypeArguments(typeArguments, typeParameters, minTypeArgumentCount, isJavaScript) {
var numTypeParameters = ts.length(typeParameters);
if (numTypeParameters) {
var numTypeArguments = ts.length(typeArguments);
if ((isJavaScript || numTypeArguments >= minTypeArgumentCount) && numTypeArguments <= numTypeParameters) {
if (!typeArguments) {
typeArguments = [];
}
for (var i = numTypeArguments; i < numTypeParameters; i++) {
typeArguments[i] = getDefaultTypeArgumentType(isJavaScript);
}
for (var i = numTypeArguments; i < numTypeParameters; i++) {
var mapper = createTypeMapper(typeParameters, typeArguments);
var defaultType = getDefaultFromTypeParameter(typeParameters[i]);
typeArguments[i] = defaultType ? instantiateType(defaultType, mapper) : getDefaultTypeArgumentType(isJavaScript);
}
}
}
return typeArguments;
}
function getSignatureFromDeclaration(declaration) {
var links = getNodeLinks(declaration);
if (!links.resolvedSignature) {
var parameters = [];
var hasLiteralTypes = false;
var minArgumentCount = 0;
var thisParameter = undefined;
var hasThisParameter = void 0;
var iife = ts.getImmediatelyInvokedFunctionExpression(declaration);
var isJSConstructSignature = ts.isJSDocConstructSignature(declaration);
var isUntypedSignatureInJSFile = !iife && !isJSConstructSignature && ts.isInJavaScriptFile(declaration) && !ts.hasJSDocParameterTags(declaration);
for (var i = isJSConstructSignature ? 1 : 0; i < declaration.parameters.length; i++) {
var param = declaration.parameters[i];
var paramSymbol = param.symbol;
if (paramSymbol && !!(paramSymbol.flags & 4) && !ts.isBindingPattern(param.name)) {
var resolvedSymbol = resolveName(param, paramSymbol.escapedName, 107455, undefined, undefined, false);
paramSymbol = resolvedSymbol;
}
if (i === 0 && paramSymbol.escapedName === "this") {
hasThisParameter = true;
thisParameter = param.symbol;
}
else {
parameters.push(paramSymbol);
}
if (param.type && param.type.kind === 173) {
hasLiteralTypes = true;
}
var isOptionalParameter_1 = param.initializer || param.questionToken || param.dotDotDotToken ||
iife && parameters.length > iife.arguments.length && !param.type ||
isJSDocOptionalParameter(param) ||
isUntypedSignatureInJSFile;
if (!isOptionalParameter_1) {
minArgumentCount = parameters.length;
}
}
if ((declaration.kind === 153 || declaration.kind === 154) &&
!ts.hasDynamicName(declaration) &&
(!hasThisParameter || !thisParameter)) {
var otherKind = declaration.kind === 153 ? 154 : 153;
var other = ts.getDeclarationOfKind(declaration.symbol, otherKind);
if (other) {
thisParameter = getAnnotatedAccessorThisParameter(other);
}
}
var classType = declaration.kind === 152 ?
getDeclaredTypeOfClassOrInterface(getMergedSymbol(declaration.parent.symbol))
: undefined;
var typeParameters = classType ? classType.localTypeParameters : getTypeParametersFromDeclaration(declaration);
var returnType = getSignatureReturnTypeFromDeclaration(declaration, isJSConstructSignature, classType);
var typePredicate = declaration.type && declaration.type.kind === 158 ?
createTypePredicateFromTypePredicateNode(declaration.type) :
undefined;
var hasRestLikeParameter = ts.hasRestParameter(declaration);
if (!hasRestLikeParameter && ts.isInJavaScriptFile(declaration) && containsArgumentsReference(declaration)) {
hasRestLikeParameter = true;
var syntheticArgsSymbol = createSymbol(3, "args");
syntheticArgsSymbol.type = anyArrayType;
syntheticArgsSymbol.isRestParameter = true;
parameters.push(syntheticArgsSymbol);
}
links.resolvedSignature = createSignature(declaration, typeParameters, thisParameter, parameters, returnType, typePredicate, minArgumentCount, hasRestLikeParameter, hasLiteralTypes);
}
return links.resolvedSignature;
}
function getSignatureReturnTypeFromDeclaration(declaration, isJSConstructSignature, classType) {
if (isJSConstructSignature) {
return getTypeFromTypeNode(declaration.parameters[0].type);
}
else if (classType) {
return classType;
}
var typeNode = ts.getEffectiveReturnTypeNode(declaration);
if (typeNode) {
return getTypeFromTypeNode(typeNode);
}
if (declaration.kind === 153 && !ts.hasDynamicName(declaration)) {
var setter = ts.getDeclarationOfKind(declaration.symbol, 154);
return getAnnotatedAccessorType(setter);
}
if (ts.nodeIsMissing(declaration.body)) {
return anyType;
}
}
function containsArgumentsReference(declaration) {
var links = getNodeLinks(declaration);
if (links.containsArgumentsReference === undefined) {
if (links.flags & 8192) {
links.containsArgumentsReference = true;
}
else {
links.containsArgumentsReference = traverse(declaration.body);
}
}
return links.containsArgumentsReference;
function traverse(node) {
if (!node)
return false;
switch (node.kind) {
case 71:
return node.escapedText === "arguments" && ts.isPartOfExpression(node);
case 149:
case 151:
case 153:
case 154:
return node.name.kind === 144
&& traverse(node.name);
default:
return !ts.nodeStartsNewLexicalEnvironment(node) && !ts.isPartOfTypeNode(node) && ts.forEachChild(node, traverse);
}
}
}
function getSignaturesOfSymbol(symbol) {
if (!symbol)
return ts.emptyArray;
var result = [];
for (var i = 0; i < symbol.declarations.length; i++) {
var node = symbol.declarations[i];
switch (node.kind) {
case 160:
case 161:
case 228:
case 151:
case 150:
case 152:
case 155:
case 156:
case 157:
case 153:
case 154:
case 186:
case 187:
case 273:
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 getThisTypeOfSignature(signature) {
if (signature.thisParameter) {
return getTypeOfSymbol(signature.thisParameter);
}
}
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), true);
}
else {
type = getReturnTypeFromBody(signature.declaration);
}
if (!popTypeResolution()) {
type = anyType;
if (noImplicitAny) {
var declaration = signature.declaration;
var name = ts.getNameOfDeclaration(declaration);
if (name) {
error(name, ts.Diagnostics._0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions, ts.declarationNameToString(name));
}
else {
error(declaration, ts.Diagnostics.Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions);
}
}
}
signature.resolvedReturnType = type;
}
return signature.resolvedReturnType;
}
function isResolvingReturnTypeOfSignature(signature) {
return !signature.resolvedReturnType && findResolutionCycleStartIndex(signature, 3) >= 0;
}
function getRestTypeOfSignature(signature) {
if (signature.hasRestParameter) {
var type = getTypeOfSymbol(ts.lastOrUndefined(signature.parameters));
if (getObjectFlags(type) & 4 && type.target === globalArrayType) {
return type.typeArguments[0];
}
}
return anyType;
}
function getSignatureInstantiation(signature, typeArguments, isJavascript) {
typeArguments = fillMissingTypeArguments(typeArguments, signature.typeParameters, getMinTypeArgumentCount(signature.typeParameters), isJavascript);
var instantiations = signature.instantiations || (signature.instantiations = ts.createMap());
var id = getTypeListId(typeArguments);
var instantiation = instantiations.get(id);
if (!instantiation) {
instantiations.set(id, instantiation = createSignatureInstantiation(signature, typeArguments));
}
return instantiation;
}
function createSignatureInstantiation(signature, typeArguments) {
return instantiateSignature(signature, createTypeMapper(signature.typeParameters, typeArguments), true);
}
function getErasedSignature(signature) {
return signature.typeParameters ?
signature.erasedSignatureCache || (signature.erasedSignatureCache = createErasedSignature(signature)) :
signature;
}
function createErasedSignature(signature) {
return instantiateSignature(signature, createTypeEraser(signature.typeParameters), true);
}
function getCanonicalSignature(signature) {
return signature.typeParameters ?
signature.canonicalSignatureCache || (signature.canonicalSignatureCache = createCanonicalSignature(signature)) :
signature;
}
function createCanonicalSignature(signature) {
return getSignatureInstantiation(signature, ts.map(signature.typeParameters, function (tp) { return tp.target && !getConstraintOfTypeParameter(tp.target) ? tp.target : tp; }), ts.isInJavaScriptFile(signature.declaration));
}
function getOrCreateTypeFromSignature(signature) {
if (!signature.isolatedSignatureType) {
var isConstructor = signature.declaration.kind === 152 || signature.declaration.kind === 156;
var type = createObjectType(16);
type.members = emptySymbols;
type.properties = ts.emptyArray;
type.callSignatures = !isConstructor ? [signature] : ts.emptyArray;
type.constructSignatures = isConstructor ? [signature] : ts.emptyArray;
signature.isolatedSignatureType = type;
}
return signature.isolatedSignatureType;
}
function getIndexSymbol(symbol) {
return symbol.members.get("__index");
}
function getIndexDeclarationOfSymbol(symbol, kind) {
var syntaxKind = kind === 1 ? 133 : 136;
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, ts.hasModifier(declaration, 64), declaration);
}
return undefined;
}
function getConstraintDeclaration(type) {
return type.symbol && ts.getDeclarationOfKind(type.symbol, 145).constraint;
}
function getConstraintFromTypeParameter(typeParameter) {
if (!typeParameter.constraint) {
if (typeParameter.target) {
var targetConstraint = getConstraintOfTypeParameter(typeParameter.target);
typeParameter.constraint = targetConstraint ? instantiateType(targetConstraint, typeParameter.mapper) : noConstraintType;
}
else {
var constraintDeclaration = getConstraintDeclaration(typeParameter);
typeParameter.constraint = constraintDeclaration ? getTypeFromTypeNode(constraintDeclaration) : noConstraintType;
}
}
return typeParameter.constraint === noConstraintType ? undefined : typeParameter.constraint;
}
function getParentSymbolOfTypeParameter(typeParameter) {
return getSymbolOfNode(ts.getDeclarationOfKind(typeParameter.symbol, 145).parent);
}
function getTypeListId(types) {
var result = "";
if (types) {
var length_4 = types.length;
var i = 0;
while (i < length_4) {
var startId = types[i].id;
var count = 1;
while (i + count < length_4 && types[i + count].id === startId + count) {
count++;
}
if (result.length) {
result += ",";
}
result += startId;
if (count > 1) {
result += ":" + count;
}
i += count;
}
}
return result;
}
function getPropagatingFlagsOfTypes(types, excludeKinds) {
var result = 0;
for (var _i = 0, types_5 = types; _i < types_5.length; _i++) {
var type = types_5[_i];
if (!(type.flags & excludeKinds)) {
result |= type.flags;
}
}
return result & 14680064;
}
function createTypeReference(target, typeArguments) {
var id = getTypeListId(typeArguments);
var type = target.instantiations.get(id);
if (!type) {
type = createObjectType(4, target.symbol);
target.instantiations.set(id, type);
type.flags |= typeArguments ? getPropagatingFlagsOfTypes(typeArguments, 0) : 0;
type.target = target;
type.typeArguments = typeArguments;
}
return type;
}
function cloneTypeReference(source) {
var type = createType(source.flags);
type.symbol = source.symbol;
type.objectFlags = source.objectFlags;
type.target = source.target;
type.typeArguments = source.typeArguments;
return type;
}
function getTypeReferenceArity(type) {
return ts.length(type.target.typeParameters);
}
function getTypeFromClassOrInterfaceReference(node, symbol, typeArgs) {
var type = getDeclaredTypeOfSymbol(getMergedSymbol(symbol));
var typeParameters = type.localTypeParameters;
if (typeParameters) {
var numTypeArguments = ts.length(node.typeArguments);
var minTypeArgumentCount = getMinTypeArgumentCount(typeParameters);
var isJavascript = ts.isInJavaScriptFile(node);
if (!isJavascript && (numTypeArguments < minTypeArgumentCount || numTypeArguments > typeParameters.length)) {
error(node, minTypeArgumentCount === typeParameters.length
? ts.Diagnostics.Generic_type_0_requires_1_type_argument_s
: ts.Diagnostics.Generic_type_0_requires_between_1_and_2_type_arguments, typeToString(type, undefined, 1), minTypeArgumentCount, typeParameters.length);
return unknownType;
}
var typeArguments = ts.concatenate(type.outerTypeParameters, fillMissingTypeArguments(typeArgs, typeParameters, minTypeArgumentCount, isJavascript));
return createTypeReference(type, typeArguments);
}
if (node.typeArguments) {
error(node, ts.Diagnostics.Type_0_is_not_generic, typeToString(type));
return unknownType;
}
return type;
}
function getTypeAliasInstantiation(symbol, typeArguments) {
var type = getDeclaredTypeOfSymbol(symbol);
var links = getSymbolLinks(symbol);
var typeParameters = links.typeParameters;
var id = getTypeListId(typeArguments);
var instantiation = links.instantiations.get(id);
if (!instantiation) {
links.instantiations.set(id, instantiation = instantiateType(type, createTypeMapper(typeParameters, fillMissingTypeArguments(typeArguments, typeParameters, getMinTypeArgumentCount(typeParameters), ts.isInJavaScriptFile(symbol.valueDeclaration)))));
}
return instantiation;
}
function getTypeFromTypeAliasReference(node, symbol, typeArguments) {
var type = getDeclaredTypeOfSymbol(symbol);
var typeParameters = getSymbolLinks(symbol).typeParameters;
if (typeParameters) {
var numTypeArguments = ts.length(node.typeArguments);
var minTypeArgumentCount = getMinTypeArgumentCount(typeParameters);
if (numTypeArguments < minTypeArgumentCount || numTypeArguments > typeParameters.length) {
error(node, minTypeArgumentCount === typeParameters.length
? ts.Diagnostics.Generic_type_0_requires_1_type_argument_s
: ts.Diagnostics.Generic_type_0_requires_between_1_and_2_type_arguments, symbolToString(symbol), minTypeArgumentCount, typeParameters.length);
return unknownType;
}
return getTypeAliasInstantiation(symbol, typeArguments);
}
if (node.typeArguments) {
error(node, ts.Diagnostics.Type_0_is_not_generic, symbolToString(symbol));
return unknownType;
}
return type;
}
function getTypeReferenceName(node) {
switch (node.kind) {
case 159:
return node.typeName;
case 201:
var expr = node.expression;
if (ts.isEntityNameExpression(expr)) {
return expr;
}
}
return undefined;
}
function resolveTypeReferenceName(typeReferenceName, meaning) {
if (!typeReferenceName) {
return unknownSymbol;
}
return resolveEntityName(typeReferenceName, meaning) || unknownSymbol;
}
function getTypeReferenceType(node, symbol) {
var typeArguments = typeArgumentsFromTypeReferenceNode(node);
if (symbol === unknownSymbol) {
return unknownType;
}
var type = getTypeReferenceTypeWorker(node, symbol, typeArguments);
if (type) {
return type;
}
var res = tryGetDeclaredTypeOfSymbol(symbol);
if (res !== undefined) {
if (typeArguments) {
error(node, ts.Diagnostics.Type_0_is_not_generic, symbolToString(symbol));
return unknownType;
}
return res;
}
if (!(symbol.flags & 107455 && isJSDocTypeReference(node))) {
return unknownType;
}
var valueType = getTypeOfSymbol(symbol);
if (valueType.symbol && !isInferredClassType(valueType)) {
var referenceType = getTypeReferenceTypeWorker(node, valueType.symbol, typeArguments);
if (referenceType) {
return referenceType;
}
}
resolveTypeReferenceName(getTypeReferenceName(node), 793064);
return valueType;
}
function getTypeReferenceTypeWorker(node, symbol, typeArguments) {
if (symbol.flags & (32 | 64)) {
return getTypeFromClassOrInterfaceReference(node, symbol, typeArguments);
}
if (symbol.flags & 524288) {
return getTypeFromTypeAliasReference(node, symbol, typeArguments);
}
if (symbol.flags & 16 &&
isJSDocTypeReference(node) &&
(symbol.members || ts.getJSDocClassTag(symbol.valueDeclaration))) {
return getInferredClassType(symbol);
}
}
function isJSDocTypeReference(node) {
return node.flags & 1048576 && node.kind === 159;
}
function getIntendedTypeFromJSDocTypeReference(node) {
if (ts.isIdentifier(node.typeName)) {
if (node.typeName.escapedText === "Object") {
if (ts.isJSDocIndexSignature(node)) {
var indexed = getTypeFromTypeNode(node.typeArguments[0]);
var target = getTypeFromTypeNode(node.typeArguments[1]);
var index = createIndexInfo(target, false);
return createAnonymousType(undefined, emptySymbols, ts.emptyArray, ts.emptyArray, indexed === stringType && index, indexed === numberType && index);
}
return anyType;
}
switch (node.typeName.escapedText) {
case "String":
return stringType;
case "Number":
return numberType;
case "Boolean":
return booleanType;
case "Void":
return voidType;
case "Undefined":
return undefinedType;
case "Null":
return nullType;
case "Function":
case "function":
return globalFunctionType;
case "Array":
case "array":
return !node.typeArguments || !node.typeArguments.length ? anyArrayType : undefined;
case "Promise":
case "promise":
return !node.typeArguments || !node.typeArguments.length ? createPromiseType(anyType) : undefined;
}
}
}
function getTypeFromJSDocNullableTypeNode(node) {
var type = getTypeFromTypeNode(node.type);
return strictNullChecks ? getUnionType([type, nullType]) : type;
}
function getTypeFromTypeReference(node) {
var links = getNodeLinks(node);
if (!links.resolvedType) {
var symbol = void 0;
var type = void 0;
var meaning = 793064;
if (isJSDocTypeReference(node)) {
type = getIntendedTypeFromJSDocTypeReference(node);
meaning |= 107455;
}
if (!type) {
symbol = resolveTypeReferenceName(getTypeReferenceName(node), meaning);
type = getTypeReferenceType(node, symbol);
}
links.resolvedSymbol = symbol;
links.resolvedType = type;
}
return links.resolvedType;
}
function typeArgumentsFromTypeReferenceNode(node) {
return ts.map(node.typeArguments, getTypeFromTypeNode);
}
function getTypeFromTypeQueryNode(node) {
var links = getNodeLinks(node);
if (!links.resolvedType) {
links.resolvedType = getWidenedType(checkExpression(node.exprName));
}
return links.resolvedType;
}
function getTypeOfGlobalSymbol(symbol, arity) {
function getTypeDeclaration(symbol) {
var declarations = symbol.declarations;
for (var _i = 0, declarations_3 = declarations; _i < declarations_3.length; _i++) {
var declaration = declarations_3[_i];
switch (declaration.kind) {
case 229:
case 230:
case 232:
return declaration;
}
}
}
if (!symbol) {
return arity ? emptyGenericType : emptyObjectType;
}
var type = getDeclaredTypeOfSymbol(symbol);
if (!(type.flags & 32768)) {
error(getTypeDeclaration(symbol), ts.Diagnostics.Global_type_0_must_be_a_class_or_interface_type, ts.symbolName(symbol));
return arity ? emptyGenericType : emptyObjectType;
}
if (ts.length(type.typeParameters) !== arity) {
error(getTypeDeclaration(symbol), ts.Diagnostics.Global_type_0_must_have_1_type_parameter_s, ts.symbolName(symbol), arity);
return arity ? emptyGenericType : emptyObjectType;
}
return type;
}
function getGlobalValueSymbol(name, reportErrors) {
return getGlobalSymbol(name, 107455, reportErrors ? ts.Diagnostics.Cannot_find_global_value_0 : undefined);
}
function getGlobalTypeSymbol(name, reportErrors) {
return getGlobalSymbol(name, 793064, reportErrors ? ts.Diagnostics.Cannot_find_global_type_0 : undefined);
}
function getGlobalSymbol(name, meaning, diagnostic) {
return resolveName(undefined, name, meaning, diagnostic, name, false);
}
function getGlobalType(name, arity, reportErrors) {
var symbol = getGlobalTypeSymbol(name, reportErrors);
return symbol || reportErrors ? getTypeOfGlobalSymbol(symbol, arity) : undefined;
}
function getGlobalTypedPropertyDescriptorType() {
return deferredGlobalTypedPropertyDescriptorType || (deferredGlobalTypedPropertyDescriptorType = getGlobalType("TypedPropertyDescriptor", 1, true)) || emptyGenericType;
}
function getGlobalTemplateStringsArrayType() {
return deferredGlobalTemplateStringsArrayType || (deferredGlobalTemplateStringsArrayType = getGlobalType("TemplateStringsArray", 0, true)) || emptyObjectType;
}
function getGlobalESSymbolConstructorSymbol(reportErrors) {
return deferredGlobalESSymbolConstructorSymbol || (deferredGlobalESSymbolConstructorSymbol = getGlobalValueSymbol("Symbol", reportErrors));
}
function getGlobalESSymbolType(reportErrors) {
return deferredGlobalESSymbolType || (deferredGlobalESSymbolType = getGlobalType("Symbol", 0, reportErrors)) || emptyObjectType;
}
function getGlobalPromiseType(reportErrors) {
return deferredGlobalPromiseType || (deferredGlobalPromiseType = getGlobalType("Promise", 1, reportErrors)) || emptyGenericType;
}
function getGlobalPromiseConstructorSymbol(reportErrors) {
return deferredGlobalPromiseConstructorSymbol || (deferredGlobalPromiseConstructorSymbol = getGlobalValueSymbol("Promise", reportErrors));
}
function getGlobalPromiseConstructorLikeType(reportErrors) {
return deferredGlobalPromiseConstructorLikeType || (deferredGlobalPromiseConstructorLikeType = getGlobalType("PromiseConstructorLike", 0, reportErrors)) || emptyObjectType;
}
function getGlobalAsyncIterableType(reportErrors) {
return deferredGlobalAsyncIterableType || (deferredGlobalAsyncIterableType = getGlobalType("AsyncIterable", 1, reportErrors)) || emptyGenericType;
}
function getGlobalAsyncIteratorType(reportErrors) {
return deferredGlobalAsyncIteratorType || (deferredGlobalAsyncIteratorType = getGlobalType("AsyncIterator", 1, reportErrors)) || emptyGenericType;
}
function getGlobalAsyncIterableIteratorType(reportErrors) {
return deferredGlobalAsyncIterableIteratorType || (deferredGlobalAsyncIterableIteratorType = getGlobalType("AsyncIterableIterator", 1, reportErrors)) || emptyGenericType;
}
function getGlobalIterableType(reportErrors) {
return deferredGlobalIterableType || (deferredGlobalIterableType = getGlobalType("Iterable", 1, reportErrors)) || emptyGenericType;
}
function getGlobalIteratorType(reportErrors) {
return deferredGlobalIteratorType || (deferredGlobalIteratorType = getGlobalType("Iterator", 1, reportErrors)) || emptyGenericType;
}
function getGlobalIterableIteratorType(reportErrors) {
return deferredGlobalIterableIteratorType || (deferredGlobalIterableIteratorType = getGlobalType("IterableIterator", 1, reportErrors)) || emptyGenericType;
}
function getGlobalTypeOrUndefined(name, arity) {
if (arity === void 0) { arity = 0; }
var symbol = getGlobalSymbol(name, 793064, undefined);
return symbol && getTypeOfGlobalSymbol(symbol, arity);
}
function getExportedTypeFromNamespace(namespace, name) {
var namespaceSymbol = getGlobalSymbol(namespace, 1920, undefined);
var typeSymbol = namespaceSymbol && getSymbol(namespaceSymbol.exports, name, 793064);
return typeSymbol && getDeclaredTypeOfSymbol(typeSymbol);
}
function createTypeFromGenericGlobalType(genericGlobalType, typeArguments) {
return genericGlobalType !== emptyGenericType ? createTypeReference(genericGlobalType, typeArguments) : emptyObjectType;
}
function createTypedPropertyDescriptorType(propertyType) {
return createTypeFromGenericGlobalType(getGlobalTypedPropertyDescriptorType(), [propertyType]);
}
function createAsyncIterableType(iteratedType) {
return createTypeFromGenericGlobalType(getGlobalAsyncIterableType(true), [iteratedType]);
}
function createAsyncIterableIteratorType(iteratedType) {
return createTypeFromGenericGlobalType(getGlobalAsyncIterableIteratorType(true), [iteratedType]);
}
function createIterableType(iteratedType) {
return createTypeFromGenericGlobalType(getGlobalIterableType(true), [iteratedType]);
}
function createIterableIteratorType(iteratedType) {
return createTypeFromGenericGlobalType(getGlobalIterableIteratorType(true), [iteratedType]);
}
function createArrayType(elementType) {
return createTypeFromGenericGlobalType(globalArrayType, [elementType]);
}
function getTypeFromArrayTypeNode(node) {
var links = getNodeLinks(node);
if (!links.resolvedType) {
links.resolvedType = createArrayType(getTypeFromTypeNode(node.elementType));
}
return links.resolvedType;
}
function createTupleTypeOfArity(arity) {
var typeParameters = [];
var properties = [];
for (var i = 0; i < arity; i++) {
var typeParameter = createType(16384);
typeParameters.push(typeParameter);
var property = createSymbol(4, "" + i);
property.type = typeParameter;
properties.push(property);
}
var type = createObjectType(8 | 4);
type.typeParameters = typeParameters;
type.outerTypeParameters = undefined;
type.localTypeParameters = typeParameters;
type.instantiations = ts.createMap();
type.instantiations.set(getTypeListId(type.typeParameters), type);
type.target = type;
type.typeArguments = type.typeParameters;
type.thisType = createType(16384);
type.thisType.isThisType = true;
type.thisType.constraint = type;
type.declaredProperties = properties;
type.declaredCallSignatures = ts.emptyArray;
type.declaredConstructSignatures = ts.emptyArray;
type.declaredStringIndexInfo = undefined;
type.declaredNumberIndexInfo = undefined;
return type;
}
function getTupleTypeOfArity(arity) {
return tupleTypes[arity] || (tupleTypes[arity] = createTupleTypeOfArity(arity));
}
function createTupleType(elementTypes) {
return createTypeReference(getTupleTypeOfArity(elementTypes.length), elementTypes);
}
function getTypeFromTupleTypeNode(node) {
var links = getNodeLinks(node);
if (!links.resolvedType) {
links.resolvedType = createTupleType(ts.map(node.elementTypes, getTypeFromTypeNode));
}
return links.resolvedType;
}
function binarySearchTypes(types, type) {
var low = 0;
var high = types.length - 1;
var typeId = type.id;
while (low <= high) {
var middle = low + ((high - low) >> 1);
var id = types[middle].id;
if (id === typeId) {
return middle;
}
else if (id > typeId) {
high = middle - 1;
}
else {
low = middle + 1;
}
}
return ~low;
}
function containsType(types, type) {
return binarySearchTypes(types, type) >= 0;
}
function isEmptyIntersectionType(type) {
var combined = 0;
for (var _i = 0, _a = type.types; _i < _a.length; _i++) {
var t = _a[_i];
if (t.flags & 6368 && combined & 6368) {
return true;
}
combined |= t.flags;
if (combined & 6144 && combined & (32768 | 16777216)) {
return true;
}
}
return false;
}
function addTypeToUnion(typeSet, type) {
var flags = type.flags;
if (flags & 65536) {
addTypesToUnion(typeSet, type.types);
}
else if (flags & 1) {
typeSet.containsAny = true;
}
else if (!strictNullChecks && flags & 6144) {
if (flags & 2048)
typeSet.containsUndefined = true;
if (flags & 4096)
typeSet.containsNull = true;
if (!(flags & 2097152))
typeSet.containsNonWideningType = true;
}
else if (!(flags & 8192 || flags & 131072 && isEmptyIntersectionType(type))) {
if (flags & 2)
typeSet.containsString = true;
if (flags & 4)
typeSet.containsNumber = true;
if (flags & 96)
typeSet.containsStringOrNumberLiteral = true;
var len = typeSet.length;
var index = len && type.id > typeSet[len - 1].id ? ~len : binarySearchTypes(typeSet, type);
if (index < 0) {
if (!(flags & 32768 && type.objectFlags & 16 &&
type.symbol && type.symbol.flags & (16 | 8192) && containsIdenticalType(typeSet, type))) {
typeSet.splice(~index, 0, type);
}
}
}
}
function addTypesToUnion(typeSet, types) {
for (var _i = 0, types_6 = types; _i < types_6.length; _i++) {
var type = types_6[_i];
addTypeToUnion(typeSet, type);
}
}
function containsIdenticalType(types, type) {
for (var _i = 0, types_7 = types; _i < types_7.length; _i++) {
var t = types_7[_i];
if (isTypeIdenticalTo(t, type)) {
return true;
}
}
return false;
}
function isSubtypeOfAny(candidate, types) {
for (var _i = 0, types_8 = types; _i < types_8.length; _i++) {
var type = types_8[_i];
if (candidate !== type && isTypeSubtypeOf(candidate, type)) {
return true;
}
}
return false;
}
function isSetOfLiteralsFromSameEnum(types) {
var first = types[0];
if (first.flags & 256) {
var firstEnum = getParentOfSymbol(first.symbol);
for (var i = 1; i < types.length; i++) {
var other = types[i];
if (!(other.flags & 256) || (firstEnum !== getParentOfSymbol(other.symbol))) {
return false;
}
}
return true;
}
return false;
}
function removeSubtypes(types) {
if (types.length === 0 || isSetOfLiteralsFromSameEnum(types)) {
return;
}
var i = types.length;
while (i > 0) {
i--;
if (isSubtypeOfAny(types[i], types)) {
ts.orderedRemoveItemAt(types, i);
}
}
}
function removeRedundantLiteralTypes(types) {
var i = types.length;
while (i > 0) {
i--;
var t = types[i];
var remove = t.flags & 32 && types.containsString ||
t.flags & 64 && types.containsNumber ||
t.flags & 96 && t.flags & 1048576 && containsType(types, t.regularType);
if (remove) {
ts.orderedRemoveItemAt(types, i);
}
}
}
function getUnionType(types, subtypeReduction, aliasSymbol, aliasTypeArguments) {
if (types.length === 0) {
return neverType;
}
if (types.length === 1) {
return types[0];
}
var typeSet = [];
addTypesToUnion(typeSet, types);
if (typeSet.containsAny) {
return anyType;
}
if (subtypeReduction) {
removeSubtypes(typeSet);
}
else if (typeSet.containsStringOrNumberLiteral) {
removeRedundantLiteralTypes(typeSet);
}
if (typeSet.length === 0) {
return typeSet.containsNull ? typeSet.containsNonWideningType ? nullType : nullWideningType :
typeSet.containsUndefined ? typeSet.containsNonWideningType ? undefinedType : undefinedWideningType :
neverType;
}
return getUnionTypeFromSortedList(typeSet, aliasSymbol, aliasTypeArguments);
}
function getUnionTypeFromSortedList(types, aliasSymbol, aliasTypeArguments) {
if (types.length === 0) {
return neverType;
}
if (types.length === 1) {
return types[0];
}
var id = getTypeListId(types);
var type = unionTypes.get(id);
if (!type) {
var propagatedFlags = getPropagatingFlagsOfTypes(types, 6144);
type = createType(65536 | propagatedFlags);
unionTypes.set(id, type);
type.types = types;
type.aliasSymbol = aliasSymbol;
type.aliasTypeArguments = aliasTypeArguments;
}
return type;
}
function getTypeFromUnionTypeNode(node) {
var links = getNodeLinks(node);
if (!links.resolvedType) {
links.resolvedType = getUnionType(ts.map(node.types, getTypeFromTypeNode), false, getAliasSymbolForTypeNode(node), getAliasTypeArgumentsForTypeNode(node));
}
return links.resolvedType;
}
function addTypeToIntersection(typeSet, type) {
if (type.flags & 131072) {
addTypesToIntersection(typeSet, type.types);
}
else if (type.flags & 1) {
typeSet.containsAny = true;
}
else if (type.flags & 8192) {
typeSet.containsNever = true;
}
else if (getObjectFlags(type) & 16 && isEmptyObjectType(type)) {
typeSet.containsEmptyObject = true;
}
else if ((strictNullChecks || !(type.flags & 6144)) && !ts.contains(typeSet, type)) {
if (type.flags & 32768) {
typeSet.containsObjectType = true;
}
if (type.flags & 65536 && typeSet.unionIndex === undefined) {
typeSet.unionIndex = typeSet.length;
}
if (!(type.flags & 32768 && type.objectFlags & 16 &&
type.symbol && type.symbol.flags & (16 | 8192) && containsIdenticalType(typeSet, type))) {
typeSet.push(type);
}
}
}
function addTypesToIntersection(typeSet, types) {
for (var _i = 0, types_9 = types; _i < types_9.length; _i++) {
var type = types_9[_i];
addTypeToIntersection(typeSet, type);
}
}
function getIntersectionType(types, aliasSymbol, aliasTypeArguments) {
if (types.length === 0) {
return emptyObjectType;
}
var typeSet = [];
addTypesToIntersection(typeSet, types);
if (typeSet.containsNever) {
return neverType;
}
if (typeSet.containsAny) {
return anyType;
}
if (typeSet.containsEmptyObject && !typeSet.containsObjectType) {
typeSet.push(emptyObjectType);
}
if (typeSet.length === 1) {
return typeSet[0];
}
var unionIndex = typeSet.unionIndex;
if (unionIndex !== undefined) {
var unionType = typeSet[unionIndex];
return getUnionType(ts.map(unionType.types, function (t) { return getIntersectionType(ts.replaceElement(typeSet, unionIndex, t)); }), false, aliasSymbol, aliasTypeArguments);
}
var id = getTypeListId(typeSet);
var type = intersectionTypes.get(id);
if (!type) {
var propagatedFlags = getPropagatingFlagsOfTypes(typeSet, 6144);
type = createType(131072 | propagatedFlags);
intersectionTypes.set(id, type);
type.types = typeSet;
type.aliasSymbol = aliasSymbol;
type.aliasTypeArguments = aliasTypeArguments;
}
return type;
}
function getTypeFromIntersectionTypeNode(node) {
var links = getNodeLinks(node);
if (!links.resolvedType) {
links.resolvedType = getIntersectionType(ts.map(node.types, getTypeFromTypeNode), getAliasSymbolForTypeNode(node), getAliasTypeArgumentsForTypeNode(node));
}
return links.resolvedType;
}
function getIndexTypeForGenericType(type) {
if (!type.resolvedIndexType) {
type.resolvedIndexType = createType(262144);
type.resolvedIndexType.type = type;
}
return type.resolvedIndexType;
}
function getLiteralTypeFromPropertyName(prop) {
return ts.getDeclarationModifierFlagsFromSymbol(prop) & 24 || ts.startsWith(prop.escapedName, "__@") ?
neverType :
getLiteralType(ts.symbolName(prop));
}
function getLiteralTypeFromPropertyNames(type) {
return getUnionType(ts.map(getPropertiesOfType(type), getLiteralTypeFromPropertyName));
}
function getIndexType(type) {
return maybeTypeOfKind(type, 540672) ? getIndexTypeForGenericType(type) :
getObjectFlags(type) & 32 ? getConstraintTypeFromMappedType(type) :
type.flags & 1 || getIndexInfoOfType(type, 0) ? stringType :
getLiteralTypeFromPropertyNames(type);
}
function getIndexTypeOrString(type) {
var indexType = getIndexType(type);
return indexType !== neverType ? indexType : stringType;
}
function getTypeFromTypeOperatorNode(node) {
var links = getNodeLinks(node);
if (!links.resolvedType) {
links.resolvedType = getIndexType(getTypeFromTypeNode(node.type));
}
return links.resolvedType;
}
function createIndexedAccessType(objectType, indexType) {
var type = createType(524288);
type.objectType = objectType;
type.indexType = indexType;
return type;
}
function getPropertyTypeForIndexType(objectType, indexType, accessNode, cacheSymbol) {
var accessExpression = accessNode && accessNode.kind === 180 ? accessNode : undefined;
var propName = indexType.flags & 96 ?
ts.escapeLeadingUnderscores("" + indexType.value) :
accessExpression && checkThatExpressionIsProperSymbolReference(accessExpression.argumentExpression, indexType, false) ?
ts.getPropertyNameForKnownSymbolName(ts.idText(accessExpression.argumentExpression.name)) :
undefined;
if (propName !== undefined) {
var prop = getPropertyOfType(objectType, propName);
if (prop) {
if (accessExpression) {
if (ts.isAssignmentTarget(accessExpression) && (isReferenceToReadonlyEntity(accessExpression, prop) || isReferenceThroughNamespaceImport(accessExpression))) {
error(accessExpression.argumentExpression, ts.Diagnostics.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property, symbolToString(prop));
return unknownType;
}
if (cacheSymbol) {
getNodeLinks(accessNode).resolvedSymbol = prop;
}
}
return getTypeOfSymbol(prop);
}
}
if (!(indexType.flags & 6144) && isTypeAssignableToKind(indexType, 262178 | 84 | 512)) {
if (isTypeAny(objectType)) {
return anyType;
}
var indexInfo = isTypeAssignableToKind(indexType, 84) && getIndexInfoOfType(objectType, 1) ||
getIndexInfoOfType(objectType, 0) ||
undefined;
if (indexInfo) {
if (accessExpression && indexInfo.isReadonly && (ts.isAssignmentTarget(accessExpression) || ts.isDeleteTarget(accessExpression))) {
error(accessExpression, ts.Diagnostics.Index_signature_in_type_0_only_permits_reading, typeToString(objectType));
}
return indexInfo.type;
}
if (accessExpression && !isConstEnumObjectType(objectType)) {
if (noImplicitAny && !compilerOptions.suppressImplicitAnyIndexErrors) {
if (getIndexTypeOfType(objectType, 1)) {
error(accessExpression.argumentExpression, ts.Diagnostics.Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number);
}
else {
error(accessExpression, ts.Diagnostics.Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature, typeToString(objectType));
}
}
return anyType;
}
}
if (accessNode) {
var indexNode = accessNode.kind === 180 ? accessNode.argumentExpression : accessNode.indexType;
if (indexType.flags & (32 | 64)) {
error(indexNode, ts.Diagnostics.Property_0_does_not_exist_on_type_1, "" + indexType.value, typeToString(objectType));
}
else if (indexType.flags & (2 | 4)) {
error(indexNode, ts.Diagnostics.Type_0_has_no_matching_index_signature_for_type_1, typeToString(objectType), typeToString(indexType));
}
else {
error(indexNode, ts.Diagnostics.Type_0_cannot_be_used_as_an_index_type, typeToString(indexType));
}
return unknownType;
}
return anyType;
}
function isGenericObjectType(type) {
return type.flags & 540672 ? true :
getObjectFlags(type) & 32 ? isGenericIndexType(getConstraintTypeFromMappedType(type)) :
type.flags & 196608 ? ts.forEach(type.types, isGenericObjectType) :
false;
}
function isGenericIndexType(type) {
return type.flags & (540672 | 262144) ? true :
type.flags & 196608 ? ts.forEach(type.types, isGenericIndexType) :
false;
}
function isStringIndexOnlyType(type) {
if (type.flags & 32768 && !isGenericMappedType(type)) {
var t = resolveStructuredTypeMembers(type);
return t.properties.length === 0 &&
t.callSignatures.length === 0 && t.constructSignatures.length === 0 &&
t.stringIndexInfo && !t.numberIndexInfo;
}
return false;
}
function getTransformedIndexedAccessType(type) {
var objectType = type.objectType;
if (objectType.flags & 131072 && isGenericObjectType(objectType) && ts.some(objectType.types, isStringIndexOnlyType)) {
var regularTypes = [];
var stringIndexTypes = [];
for (var _i = 0, _a = objectType.types; _i < _a.length; _i++) {
var t = _a[_i];
if (isStringIndexOnlyType(t)) {
stringIndexTypes.push(getIndexTypeOfType(t, 0));
}
else {
regularTypes.push(t);
}
}
return getUnionType([
getIndexedAccessType(getIntersectionType(regularTypes), type.indexType),
getIntersectionType(stringIndexTypes)
]);
}
if (isGenericMappedType(objectType)) {
var mapper = createTypeMapper([getTypeParameterFromMappedType(objectType)], [type.indexType]);
var objectTypeMapper = objectType.mapper;
var templateMapper = objectTypeMapper ? combineTypeMappers(objectTypeMapper, mapper) : mapper;
return instantiateType(getTemplateTypeFromMappedType(objectType), templateMapper);
}
return undefined;
}
function getIndexedAccessType(objectType, indexType, accessNode) {
if (isGenericIndexType(indexType) || !(accessNode && accessNode.kind === 180) && isGenericObjectType(objectType)) {
if (objectType.flags & 1) {
return objectType;
}
var id = objectType.id + "," + indexType.id;
var type = indexedAccessTypes.get(id);
if (!type) {
indexedAccessTypes.set(id, type = createIndexedAccessType(objectType, indexType));
}
return type;
}
var apparentObjectType = getApparentType(objectType);
if (indexType.flags & 65536 && !(indexType.flags & 8)) {
var propTypes = [];
for (var _i = 0, _a = indexType.types; _i < _a.length; _i++) {
var t = _a[_i];
var propType = getPropertyTypeForIndexType(apparentObjectType, t, accessNode, false);
if (propType === unknownType) {
return unknownType;
}
propTypes.push(propType);
}
return getUnionType(propTypes);
}
return getPropertyTypeForIndexType(apparentObjectType, indexType, accessNode, true);
}
function getTypeFromIndexedAccessTypeNode(node) {
var links = getNodeLinks(node);
if (!links.resolvedType) {
links.resolvedType = getIndexedAccessType(getTypeFromTypeNode(node.objectType), getTypeFromTypeNode(node.indexType), node);
}
return links.resolvedType;
}
function getTypeFromMappedTypeNode(node) {
var links = getNodeLinks(node);
if (!links.resolvedType) {
var type = createObjectType(32, node.symbol);
type.declaration = node;
type.aliasSymbol = getAliasSymbolForTypeNode(node);
type.aliasTypeArguments = getAliasTypeArgumentsForTypeNode(node);
links.resolvedType = type;
getConstraintTypeFromMappedType(type);
}
return links.resolvedType;
}
function getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node) {
var links = getNodeLinks(node);
if (!links.resolvedType) {
var aliasSymbol = getAliasSymbolForTypeNode(node);
if (node.symbol.members.size === 0 && !aliasSymbol) {
links.resolvedType = emptyTypeLiteralType;
}
else {
var type = createObjectType(16, node.symbol);
type.aliasSymbol = aliasSymbol;
type.aliasTypeArguments = getAliasTypeArgumentsForTypeNode(node);
if (ts.isJSDocTypeLiteral(node) && node.isArrayType) {
type = createArrayType(type);
}
links.resolvedType = type;
}
}
return links.resolvedType;
}
function getAliasSymbolForTypeNode(node) {
return node.parent.kind === 231 ? getSymbolOfNode(node.parent) : undefined;
}
function getAliasTypeArgumentsForTypeNode(node) {
var symbol = getAliasSymbolForTypeNode(node);
return symbol ? getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol) : undefined;
}
function getSpreadType(left, right, symbol, propagatedFlags) {
if (left.flags & 1 || right.flags & 1) {
return anyType;
}
if (left.flags & 8192) {
return right;
}
if (right.flags & 8192) {
return left;
}
if (left.flags & 65536) {
return mapType(left, function (t) { return getSpreadType(t, right, symbol, propagatedFlags); });
}
if (right.flags & 65536) {
return mapType(right, function (t) { return getSpreadType(left, t, symbol, propagatedFlags); });
}
if (right.flags & 16777216) {
return nonPrimitiveType;
}
if (right.flags & (136 | 84 | 262178 | 272)) {
return left;
}
var members = ts.createSymbolTable();
var skippedPrivateMembers = ts.createUnderscoreEscapedMap();
var stringIndexInfo;
var numberIndexInfo;
if (left === emptyObjectType) {
stringIndexInfo = getIndexInfoOfType(right, 0);
numberIndexInfo = getIndexInfoOfType(right, 1);
}
else {
stringIndexInfo = unionSpreadIndexInfos(getIndexInfoOfType(left, 0), getIndexInfoOfType(right, 0));
numberIndexInfo = unionSpreadIndexInfos(getIndexInfoOfType(left, 1), getIndexInfoOfType(right, 1));
}
for (var _i = 0, _a = getPropertiesOfType(right); _i < _a.length; _i++) {
var rightProp = _a[_i];
var isSetterWithoutGetter = rightProp.flags & 65536 && !(rightProp.flags & 32768);
if (ts.getDeclarationModifierFlagsFromSymbol(rightProp) & (8 | 16)) {
skippedPrivateMembers.set(rightProp.escapedName, true);
}
else if (!isClassMethod(rightProp) && !isSetterWithoutGetter) {
members.set(rightProp.escapedName, getNonReadonlySymbol(rightProp));
}
}
for (var _b = 0, _c = getPropertiesOfType(left); _b < _c.length; _b++) {
var leftProp = _c[_b];
if (leftProp.flags & 65536 && !(leftProp.flags & 32768)
|| skippedPrivateMembers.has(leftProp.escapedName)
|| isClassMethod(leftProp)) {
continue;
}
if (members.has(leftProp.escapedName)) {
var rightProp = members.get(leftProp.escapedName);
var rightType = getTypeOfSymbol(rightProp);
if (rightProp.flags & 16777216) {
var declarations = ts.concatenate(leftProp.declarations, rightProp.declarations);
var flags = 4 | (leftProp.flags & 16777216);
var result = createSymbol(flags, leftProp.escapedName);
result.type = getUnionType([getTypeOfSymbol(leftProp), getTypeWithFacts(rightType, 131072)]);
result.leftSpread = leftProp;
result.rightSpread = rightProp;
result.declarations = declarations;
members.set(leftProp.escapedName, result);
}
}
else {
members.set(leftProp.escapedName, getNonReadonlySymbol(leftProp));
}
}
var spread = createAnonymousType(undefined, members, ts.emptyArray, ts.emptyArray, stringIndexInfo, numberIndexInfo);
spread.flags |= propagatedFlags;
spread.flags |= 1048576 | 4194304;
spread.objectFlags |= 128;
spread.symbol = symbol;
return spread;
}
function getNonReadonlySymbol(prop) {
if (!isReadonlySymbol(prop)) {
return prop;
}
var flags = 4 | (prop.flags & 16777216);
var result = createSymbol(flags, prop.escapedName);
result.type = getTypeOfSymbol(prop);
result.declarations = prop.declarations;
result.syntheticOrigin = prop;
return result;
}
function isClassMethod(prop) {
return prop.flags & 8192 && ts.find(prop.declarations, function (decl) { return ts.isClassLike(decl.parent); });
}
function createLiteralType(flags, value, symbol) {
var type = createType(flags);
type.symbol = symbol;
type.value = value;
return type;
}
function getFreshTypeOfLiteralType(type) {
if (type.flags & 96 && !(type.flags & 1048576)) {
if (!type.freshType) {
var freshType = createLiteralType(type.flags | 1048576, type.value, type.symbol);
freshType.regularType = type;
type.freshType = freshType;
}
return type.freshType;
}
return type;
}
function getRegularTypeOfLiteralType(type) {
return type.flags & 96 && type.flags & 1048576 ? type.regularType : type;
}
function getLiteralType(value, enumId, symbol) {
var qualifier = typeof value === "number" ? "#" : "@";
var key = enumId ? enumId + qualifier + value : qualifier + value;
var type = literalTypes.get(key);
if (!type) {
var flags = (typeof value === "number" ? 64 : 32) | (enumId ? 256 : 0);
literalTypes.set(key, type = createLiteralType(flags, value, symbol));
}
return type;
}
function getTypeFromLiteralTypeNode(node) {
var links = getNodeLinks(node);
if (!links.resolvedType) {
links.resolvedType = getRegularTypeOfLiteralType(checkExpression(node.literal));
}
return links.resolvedType;
}
function getTypeFromJSDocVariadicType(node) {
var links = getNodeLinks(node);
if (!links.resolvedType) {
var type = getTypeFromTypeNode(node.type);
links.resolvedType = type ? createArrayType(type) : unknownType;
}
return links.resolvedType;
}
function getThisType(node) {
var container = ts.getThisContainer(node, false);
var parent = container && container.parent;
if (parent && (ts.isClassLike(parent) || parent.kind === 230)) {
if (!ts.hasModifier(container, 32) &&
(container.kind !== 152 || ts.isNodeDescendantOf(node, container.body))) {
return getDeclaredTypeOfClassOrInterface(getSymbolOfNode(parent)).thisType;
}
}
error(node, ts.Diagnostics.A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface);
return 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 119:
case 268:
case 269:
return anyType;
case 136:
return stringType;
case 133:
return numberType;
case 122:
return booleanType;
case 137:
return esSymbolType;
case 105:
return voidType;
case 139:
return undefinedType;
case 95:
return nullType;
case 130:
return neverType;
case 134:
return node.flags & 65536 ? anyType : nonPrimitiveType;
case 169:
case 99:
return getTypeFromThisTypeNode(node);
case 173:
return getTypeFromLiteralTypeNode(node);
case 159:
return getTypeFromTypeReference(node);
case 158:
return booleanType;
case 201:
return getTypeFromTypeReference(node);
case 162:
return getTypeFromTypeQueryNode(node);
case 164:
return getTypeFromArrayTypeNode(node);
case 165:
return getTypeFromTupleTypeNode(node);
case 166:
return getTypeFromUnionTypeNode(node);
case 167:
return getTypeFromIntersectionTypeNode(node);
case 270:
return getTypeFromJSDocNullableTypeNode(node);
case 168:
case 271:
case 272:
case 267:
return getTypeFromTypeNode(node.type);
case 160:
case 161:
case 163:
case 285:
case 273:
return getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node);
case 170:
return getTypeFromTypeOperatorNode(node);
case 171:
return getTypeFromIndexedAccessTypeNode(node);
case 172:
return getTypeFromMappedTypeNode(node);
case 71:
case 143:
var symbol = getSymbolAtLocation(node);
return symbol && getDeclaredTypeOfSymbol(symbol);
case 274:
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 instantiateTypes(types, mapper) {
return instantiateList(types, mapper, instantiateType);
}
function instantiateSignatures(signatures, mapper) {
return instantiateList(signatures, mapper, instantiateSignature);
}
function makeUnaryTypeMapper(source, target) {
return function (t) { return t === source ? target : t; };
}
function makeBinaryTypeMapper(source1, target1, source2, target2) {
return function (t) { return t === source1 ? target1 : t === source2 ? target2 : t; };
}
function makeArrayTypeMapper(sources, targets) {
return function (t) {
for (var i = 0; i < sources.length; i++) {
if (t === sources[i]) {
return targets ? targets[i] : anyType;
}
}
return t;
};
}
function createTypeMapper(sources, targets) {
ts.Debug.assert(targets === undefined || sources.length === targets.length);
return sources.length === 1 ? makeUnaryTypeMapper(sources[0], targets ? targets[0] : anyType) :
sources.length === 2 ? makeBinaryTypeMapper(sources[0], targets ? targets[0] : anyType, sources[1], targets ? targets[1] : anyType) :
makeArrayTypeMapper(sources, targets);
}
function createTypeEraser(sources) {
return createTypeMapper(sources, undefined);
}
function createBackreferenceMapper(typeParameters, index) {
return function (t) { return ts.indexOf(typeParameters, t) >= index ? emptyObjectType : t; };
}
function isInferenceContext(mapper) {
return !!mapper.signature;
}
function cloneTypeMapper(mapper) {
return mapper && isInferenceContext(mapper) ?
createInferenceContext(mapper.signature, mapper.flags | 2, mapper.compareTypes, mapper.inferences) :
mapper;
}
function combineTypeMappers(mapper1, mapper2) {
return function (t) { return instantiateType(mapper1(t), mapper2); };
}
function createReplacementMapper(source, target, baseMapper) {
return function (t) { return t === source ? target : baseMapper(t); };
}
function cloneTypeParameter(typeParameter) {
var result = createType(16384);
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.thisParameter && instantiateSymbol(signature.thisParameter, mapper), instantiateList(signature.parameters, mapper, instantiateSymbol), undefined, freshTypePredicate, signature.minArgumentCount, signature.hasRestParameter, signature.hasLiteralTypes);
result.target = signature;
result.mapper = mapper;
return result;
}
function instantiateSymbol(symbol, mapper) {
if (ts.getCheckFlags(symbol) & 1) {
var links = getSymbolLinks(symbol);
symbol = links.target;
mapper = combineTypeMappers(links.mapper, mapper);
}
var result = createSymbol(symbol.flags, symbol.escapedName);
result.checkFlags = 1;
result.declarations = symbol.declarations;
result.parent = symbol.parent;
result.target = symbol;
result.mapper = mapper;
if (symbol.valueDeclaration) {
result.valueDeclaration = symbol.valueDeclaration;
}
if (symbol.isRestParameter) {
result.isRestParameter = symbol.isRestParameter;
}
return result;
}
function getAnonymousTypeInstantiation(type, mapper) {
var target = type.objectFlags & 64 ? type.target : type;
var symbol = target.symbol;
var links = getSymbolLinks(symbol);
var typeParameters = links.typeParameters;
if (!typeParameters) {
var declaration_1 = symbol.declarations[0];
var outerTypeParameters = getOuterTypeParameters(declaration_1, true) || ts.emptyArray;
typeParameters = symbol.flags & 2048 && !target.aliasTypeArguments ?
ts.filter(outerTypeParameters, function (tp) { return isTypeParameterPossiblyReferenced(tp, declaration_1); }) :
outerTypeParameters;
links.typeParameters = typeParameters;
if (typeParameters.length) {
links.instantiations = ts.createMap();
links.instantiations.set(getTypeListId(typeParameters), target);
}
}
if (typeParameters.length) {
var combinedMapper = type.objectFlags & 64 ? combineTypeMappers(type.mapper, mapper) : mapper;
var typeArguments = ts.map(typeParameters, combinedMapper);
var id = getTypeListId(typeArguments);
var result = links.instantiations.get(id);
if (!result) {
var newMapper = createTypeMapper(typeParameters, typeArguments);
result = target.objectFlags & 32 ? instantiateMappedType(target, newMapper) : instantiateAnonymousType(target, newMapper);
links.instantiations.set(id, result);
}
return result;
}
return type;
}
function isTypeParameterPossiblyReferenced(tp, node) {
if (tp.symbol && tp.symbol.declarations && tp.symbol.declarations.length === 1) {
var container_1 = tp.symbol.declarations[0].parent;
if (ts.findAncestor(node, function (n) { return n.kind === 207 ? "quit" : n === container_1; })) {
return ts.forEachChild(node, containsReference);
}
}
return true;
function containsReference(node) {
switch (node.kind) {
case 169:
return tp.isThisType;
case 71:
return !tp.isThisType && ts.isPartOfTypeNode(node) && getTypeFromTypeNode(node) === tp;
case 162:
return true;
}
return ts.forEachChild(node, containsReference);
}
}
function instantiateMappedType(type, mapper) {
var constraintType = getConstraintTypeFromMappedType(type);
if (constraintType.flags & 262144) {
var typeVariable_1 = constraintType.type;
if (typeVariable_1.flags & 16384) {
var mappedTypeVariable = instantiateType(typeVariable_1, mapper);
if (typeVariable_1 !== mappedTypeVariable) {
return mapType(mappedTypeVariable, function (t) {
if (isMappableType(t)) {
return instantiateAnonymousType(type, createReplacementMapper(typeVariable_1, t, mapper));
}
return t;
});
}
}
}
return instantiateAnonymousType(type, mapper);
}
function isMappableType(type) {
return type.flags & (1 | 16384 | 32768 | 131072 | 524288);
}
function instantiateAnonymousType(type, mapper) {
var result = createObjectType(type.objectFlags | 64, type.symbol);
if (type.objectFlags & 32) {
result.declaration = type.declaration;
}
result.target = type;
result.mapper = mapper;
result.aliasSymbol = type.aliasSymbol;
result.aliasTypeArguments = instantiateTypes(type.aliasTypeArguments, mapper);
return result;
}
function instantiateType(type, mapper) {
if (type && mapper !== identityMapper) {
if (type.flags & 16384) {
return mapper(type);
}
if (type.flags & 32768) {
if (type.objectFlags & 16) {
return type.symbol && type.symbol.flags & (16 | 8192 | 32 | 2048 | 4096) && type.symbol.declarations ?
getAnonymousTypeInstantiation(type, mapper) : type;
}
if (type.objectFlags & 32) {
return getAnonymousTypeInstantiation(type, mapper);
}
if (type.objectFlags & 4) {
return createTypeReference(type.target, instantiateTypes(type.typeArguments, mapper));
}
}
if (type.flags & 65536 && !(type.flags & 8190)) {
return getUnionType(instantiateTypes(type.types, mapper), false, type.aliasSymbol, instantiateTypes(type.aliasTypeArguments, mapper));
}
if (type.flags & 131072) {
return getIntersectionType(instantiateTypes(type.types, mapper), type.aliasSymbol, instantiateTypes(type.aliasTypeArguments, mapper));
}
if (type.flags & 262144) {
return getIndexType(instantiateType(type.type, mapper));
}
if (type.flags & 524288) {
return getIndexedAccessType(instantiateType(type.objectType, mapper), instantiateType(type.indexType, mapper));
}
}
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 !== 151 || ts.isObjectLiteralMethod(node));
switch (node.kind) {
case 186:
case 187:
case 151:
return isContextSensitiveFunctionLikeDeclaration(node);
case 178:
return ts.forEach(node.properties, isContextSensitive);
case 177:
return ts.forEach(node.elements, isContextSensitive);
case 195:
return isContextSensitive(node.whenTrue) ||
isContextSensitive(node.whenFalse);
case 194:
return node.operatorToken.kind === 54 &&
(isContextSensitive(node.left) || isContextSensitive(node.right));
case 261:
return isContextSensitive(node.initializer);
case 185:
return isContextSensitive(node.expression);
case 254:
return ts.forEach(node.properties, isContextSensitive);
case 253:
return node.initializer && isContextSensitive(node.initializer);
case 256:
return node.expression && isContextSensitive(node.expression);
}
return false;
}
function isContextSensitiveFunctionLikeDeclaration(node) {
if (node.typeParameters) {
return false;
}
if (ts.forEach(node.parameters, function (p) { return !ts.getEffectiveTypeAnnotationNode(p); })) {
return true;
}
if (node.kind !== 187) {
var parameter = ts.firstOrUndefined(node.parameters);
if (!(parameter && ts.parameterIsThisKeyword(parameter))) {
return true;
}
}
return node.body.kind === 207 ? false : isContextSensitive(node.body);
}
function isContextSensitiveFunctionOrObjectLiteralMethod(func) {
return (isFunctionExpressionOrArrowFunction(func) || ts.isObjectLiteralMethod(func)) && isContextSensitiveFunctionLikeDeclaration(func);
}
function getTypeWithoutSignatures(type) {
if (type.flags & 32768) {
var resolved = resolveStructuredTypeMembers(type);
if (resolved.constructSignatures.length) {
var result = createObjectType(16, type.symbol);
result.members = resolved.members;
result.properties = resolved.properties;
result.callSignatures = ts.emptyArray;
result.constructSignatures = ts.emptyArray;
return result;
}
}
else if (type.flags & 131072) {
return getIntersectionType(ts.map(type.types, getTypeWithoutSignatures));
}
return type;
}
function isTypeIdenticalTo(source, target) {
return isTypeRelatedTo(source, target, identityRelation);
}
function compareTypesIdentical(source, target) {
return isTypeRelatedTo(source, target, identityRelation) ? -1 : 0;
}
function compareTypesAssignable(source, target) {
return isTypeRelatedTo(source, target, assignableRelation) ? -1 : 0;
}
function isTypeSubtypeOf(source, target) {
return isTypeRelatedTo(source, target, subtypeRelation);
}
function isTypeAssignableTo(source, target) {
return isTypeRelatedTo(source, target, assignableRelation);
}
function isTypeInstanceOf(source, target) {
return getTargetType(source) === getTargetType(target) || isTypeSubtypeOf(source, target) && !isTypeIdenticalTo(source, target);
}
function isTypeComparableTo(source, target) {
return isTypeRelatedTo(source, target, comparableRelation);
}
function areTypesComparable(type1, type2) {
return isTypeComparableTo(type1, type2) || isTypeComparableTo(type2, type1);
}
function checkTypeAssignableTo(source, target, errorNode, headMessage, containingMessageChain) {
return checkTypeRelatedTo(source, target, assignableRelation, errorNode, headMessage, containingMessageChain);
}
function checkTypeComparableTo(source, target, errorNode, headMessage, containingMessageChain) {
return checkTypeRelatedTo(source, target, comparableRelation, errorNode, headMessage, containingMessageChain);
}
function isSignatureAssignableTo(source, target, ignoreReturnTypes) {
return compareSignaturesRelated(source, target, 0, ignoreReturnTypes, false, undefined, compareTypesAssignable) !== 0;
}
function compareSignaturesRelated(source, target, callbackCheck, ignoreReturnTypes, reportErrors, errorReporter, compareTypes) {
if (source === target) {
return -1;
}
if (!target.hasRestParameter && source.minArgumentCount > target.parameters.length) {
return 0;
}
if (source.typeParameters && source.typeParameters !== target.typeParameters) {
target = getCanonicalSignature(target);
source = instantiateSignatureInContextOf(source, target, undefined, compareTypes);
}
var kind = target.declaration ? target.declaration.kind : 0;
var strictVariance = !callbackCheck && strictFunctionTypes && kind !== 151 &&
kind !== 150 && kind !== 152;
var result = -1;
var sourceThisType = getThisTypeOfSignature(source);
if (sourceThisType && sourceThisType !== voidType) {
var targetThisType = getThisTypeOfSignature(target);
if (targetThisType) {
var related = !strictVariance && compareTypes(sourceThisType, targetThisType, false)
|| compareTypes(targetThisType, sourceThisType, reportErrors);
if (!related) {
if (reportErrors) {
errorReporter(ts.Diagnostics.The_this_types_of_each_signature_are_incompatible);
}
return 0;
}
result &= related;
}
}
var sourceMax = getNumNonRestParameters(source);
var targetMax = getNumNonRestParameters(target);
var checkCount = getNumParametersToCheckForSignatureRelatability(source, sourceMax, target, targetMax);
var sourceParams = source.parameters;
var targetParams = target.parameters;
for (var i = 0; i < checkCount; i++) {
var sourceType = i < sourceMax ? getTypeOfParameter(sourceParams[i]) : getRestTypeOfSignature(source);
var targetType = i < targetMax ? getTypeOfParameter(targetParams[i]) : getRestTypeOfSignature(target);
var sourceSig = callbackCheck ? undefined : getSingleCallSignature(getNonNullableType(sourceType));
var targetSig = callbackCheck ? undefined : getSingleCallSignature(getNonNullableType(targetType));
var callbacks = sourceSig && targetSig && !sourceSig.typePredicate && !targetSig.typePredicate &&
(getFalsyFlags(sourceType) & 6144) === (getFalsyFlags(targetType) & 6144);
var related = callbacks ?
compareSignaturesRelated(targetSig, sourceSig, strictVariance ? 2 : 1, false, reportErrors, errorReporter, compareTypes) :
!callbackCheck && !strictVariance && compareTypes(sourceType, targetType, false) || compareTypes(targetType, sourceType, reportErrors);
if (!related) {
if (reportErrors) {
errorReporter(ts.Diagnostics.Types_of_parameters_0_and_1_are_incompatible, ts.symbolName(sourceParams[i < sourceMax ? i : sourceMax]), ts.symbolName(targetParams[i < targetMax ? i : targetMax]));
}
return 0;
}
result &= related;
}
if (!ignoreReturnTypes) {
var targetReturnType = getReturnTypeOfSignature(target);
if (targetReturnType === voidType) {
return result;
}
var sourceReturnType = getReturnTypeOfSignature(source);
if (target.typePredicate) {
if (source.typePredicate) {
result &= compareTypePredicateRelatedTo(source.typePredicate, target.typePredicate, source.declaration, target.declaration, reportErrors, errorReporter, compareTypes);
}
else if (ts.isIdentifierTypePredicate(target.typePredicate)) {
if (reportErrors) {
errorReporter(ts.Diagnostics.Signature_0_must_be_a_type_predicate, signatureToString(source));
}
return 0;
}
}
else {
result &= callbackCheck === 1 && compareTypes(targetReturnType, sourceReturnType, false) ||
compareTypes(sourceReturnType, targetReturnType, reportErrors);
}
}
return result;
}
function compareTypePredicateRelatedTo(source, target, sourceDeclaration, targetDeclaration, reportErrors, errorReporter, compareTypes) {
if (source.kind !== target.kind) {
if (reportErrors) {
errorReporter(ts.Diagnostics.A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard);
errorReporter(ts.Diagnostics.Type_predicate_0_is_not_assignable_to_1, typePredicateToString(source), typePredicateToString(target));
}
return 0;
}
if (source.kind === 1) {
var sourcePredicate = source;
var targetPredicate = target;
var sourceIndex = sourcePredicate.parameterIndex - (ts.getThisParameter(sourceDeclaration) ? 1 : 0);
var targetIndex = targetPredicate.parameterIndex - (ts.getThisParameter(targetDeclaration) ? 1 : 0);
if (sourceIndex !== targetIndex) {
if (reportErrors) {
errorReporter(ts.Diagnostics.Parameter_0_is_not_in_the_same_position_as_parameter_1, sourcePredicate.parameterName, targetPredicate.parameterName);
errorReporter(ts.Diagnostics.Type_predicate_0_is_not_assignable_to_1, typePredicateToString(source), typePredicateToString(target));
}
return 0;
}
}
var related = compareTypes(source.type, target.type, reportErrors);
if (related === 0 && reportErrors) {
errorReporter(ts.Diagnostics.Type_predicate_0_is_not_assignable_to_1, typePredicateToString(source), typePredicateToString(target));
}
return related;
}
function isImplementationCompatibleWithOverload(implementation, overload) {
var erasedSource = getErasedSignature(implementation);
var erasedTarget = getErasedSignature(overload);
var sourceReturnType = getReturnTypeOfSignature(erasedSource);
var targetReturnType = getReturnTypeOfSignature(erasedTarget);
if (targetReturnType === voidType
|| isTypeRelatedTo(targetReturnType, sourceReturnType, assignableRelation)
|| isTypeRelatedTo(sourceReturnType, targetReturnType, assignableRelation)) {
return isSignatureAssignableTo(erasedSource, erasedTarget, true);
}
return false;
}
function getNumNonRestParameters(signature) {
var numParams = signature.parameters.length;
return signature.hasRestParameter ?
numParams - 1 :
numParams;
}
function getNumParametersToCheckForSignatureRelatability(source, sourceNonRestParamCount, target, targetNonRestParamCount) {
if (source.hasRestParameter === target.hasRestParameter) {
if (source.hasRestParameter) {
return Math.max(sourceNonRestParamCount, targetNonRestParamCount) + 1;
}
else {
return Math.min(sourceNonRestParamCount, targetNonRestParamCount);
}
}
else {
return source.hasRestParameter ?
targetNonRestParamCount :
sourceNonRestParamCount;
}
}
function isEmptyResolvedType(t) {
return t.properties.length === 0 &&
t.callSignatures.length === 0 &&
t.constructSignatures.length === 0 &&
!t.stringIndexInfo &&
!t.numberIndexInfo;
}
function isEmptyObjectType(type) {
return type.flags & 32768 ? isEmptyResolvedType(resolveStructuredTypeMembers(type)) :
type.flags & 16777216 ? true :
type.flags & 65536 ? ts.forEach(type.types, isEmptyObjectType) :
type.flags & 131072 ? !ts.forEach(type.types, function (t) { return !isEmptyObjectType(t); }) :
false;
}
function isEnumTypeRelatedTo(sourceSymbol, targetSymbol, errorReporter) {
if (sourceSymbol === targetSymbol) {
return true;
}
var id = getSymbolId(sourceSymbol) + "," + getSymbolId(targetSymbol);
var relation = enumRelation.get(id);
if (relation !== undefined) {
return relation;
}
if (sourceSymbol.escapedName !== targetSymbol.escapedName || !(sourceSymbol.flags & 256) || !(targetSymbol.flags & 256)) {
enumRelation.set(id, false);
return false;
}
var targetEnumType = getTypeOfSymbol(targetSymbol);
for (var _i = 0, _a = getPropertiesOfType(getTypeOfSymbol(sourceSymbol)); _i < _a.length; _i++) {
var property = _a[_i];
if (property.flags & 8) {
var targetProperty = getPropertyOfType(targetEnumType, property.escapedName);
if (!targetProperty || !(targetProperty.flags & 8)) {
if (errorReporter) {
errorReporter(ts.Diagnostics.Property_0_is_missing_in_type_1, ts.symbolName(property), typeToString(getDeclaredTypeOfSymbol(targetSymbol), undefined, 256));
}
enumRelation.set(id, false);
return false;
}
}
}
enumRelation.set(id, true);
return true;
}
function isSimpleTypeRelatedTo(source, target, relation, errorReporter) {
var s = source.flags;
var t = target.flags;
if (t & 8192)
return false;
if (t & 1 || s & 8192)
return true;
if (s & 262178 && t & 2)
return true;
if (s & 32 && s & 256 &&
t & 32 && !(t & 256) &&
source.value === target.value)
return true;
if (s & 84 && t & 4)
return true;
if (s & 64 && s & 256 &&
t & 64 && !(t & 256) &&
source.value === target.value)
return true;
if (s & 136 && t & 8)
return true;
if (s & 16 && t & 16 && isEnumTypeRelatedTo(source.symbol, target.symbol, errorReporter))
return true;
if (s & 256 && t & 256) {
if (s & 65536 && t & 65536 && isEnumTypeRelatedTo(source.symbol, target.symbol, errorReporter))
return true;
if (s & 224 && t & 224 &&
source.value === target.value &&
isEnumTypeRelatedTo(getParentOfSymbol(source.symbol), getParentOfSymbol(target.symbol), errorReporter))
return true;
}
if (s & 2048 && (!strictNullChecks || t & (2048 | 1024)))
return true;
if (s & 4096 && (!strictNullChecks || t & 4096))
return true;
if (s & 32768 && t & 16777216)
return true;
if (relation === assignableRelation || relation === comparableRelation) {
if (s & 1)
return true;
if (s & (4 | 64) && !(s & 256) && (t & 16 || t & 64 && t & 256))
return true;
}
return false;
}
function isTypeRelatedTo(source, target, relation) {
if (source.flags & 96 && source.flags & 1048576) {
source = source.regularType;
}
if (target.flags & 96 && target.flags & 1048576) {
target = target.regularType;
}
if (source === target || relation !== identityRelation && isSimpleTypeRelatedTo(source, target, relation)) {
return true;
}
if (source.flags & 32768 && target.flags & 32768) {
var related = relation.get(getRelationKey(source, target, relation));
if (related !== undefined) {
return related === 1;
}
}
if (source.flags & 1032192 || target.flags & 1032192) {
return checkTypeRelatedTo(source, target, relation, undefined);
}
return false;
}
function checkTypeRelatedTo(source, target, relation, errorNode, headMessage, containingMessageChain) {
var errorInfo;
var maybeKeys;
var sourceStack;
var targetStack;
var maybeCount = 0;
var depth = 0;
var expandingFlags = 0;
var overflow = false;
var isIntersectionConstituent = false;
ts.Debug.assert(relation !== identityRelation || !errorNode, "no error reporting in identity checking");
var result = isRelatedTo(source, target, !!errorNode, headMessage);
if (overflow) {
error(errorNode, ts.Diagnostics.Excessive_stack_depth_comparing_types_0_and_1, typeToString(source), typeToString(target));
}
else if (errorInfo) {
if (containingMessageChain) {
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, 256);
targetType = typeToString(target, undefined, 256);
}
if (!message) {
if (relation === comparableRelation) {
message = ts.Diagnostics.Type_0_is_not_comparable_to_type_1;
}
else if (sourceType === targetType) {
message = ts.Diagnostics.Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated;
}
else {
message = ts.Diagnostics.Type_0_is_not_assignable_to_type_1;
}
}
reportError(message, sourceType, targetType);
}
function tryElaborateErrorsForPrimitivesAndObjects(source, target) {
var sourceType = typeToString(source);
var targetType = typeToString(target);
if ((globalStringType === source && stringType === target) ||
(globalNumberType === source && numberType === target) ||
(globalBooleanType === source && booleanType === target) ||
(getGlobalESSymbolType(false) === source && esSymbolType === target)) {
reportError(ts.Diagnostics._0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible, targetType, sourceType);
}
}
function isUnionOrIntersectionTypeWithoutNullableConstituents(type) {
if (!(type.flags & 196608)) {
return false;
}
var seenNonNullable = false;
for (var _i = 0, _a = type.types; _i < _a.length; _i++) {
var t = _a[_i];
if (t.flags & 6144) {
continue;
}
if (seenNonNullable) {
return true;
}
seenNonNullable = true;
}
return false;
}
function isRelatedTo(source, target, reportErrors, headMessage) {
if (source.flags & 96 && source.flags & 1048576) {
source = source.regularType;
}
if (target.flags & 96 && target.flags & 1048576) {
target = target.regularType;
}
if (source === target)
return -1;
if (relation === identityRelation) {
return isIdenticalTo(source, target);
}
if (isSimpleTypeRelatedTo(source, target, relation, reportErrors ? reportError : undefined))
return -1;
if (getObjectFlags(source) & 128 && source.flags & 1048576) {
if (hasExcessProperties(source, target, reportErrors)) {
if (reportErrors) {
reportRelationError(headMessage, source, target);
}
return 0;
}
if (isUnionOrIntersectionTypeWithoutNullableConstituents(target)) {
source = getRegularTypeOfObjectLiteral(source);
}
}
if (relation !== comparableRelation &&
!(source.flags & 196608) &&
!(target.flags & 65536) &&
!isIntersectionConstituent &&
source !== globalObjectType &&
(getPropertiesOfType(source).length > 0 ||
getSignaturesOfType(source, 0).length > 0 ||
getSignaturesOfType(source, 1).length > 0) &&
isWeakType(target) &&
!hasCommonProperties(source, target)) {
if (reportErrors) {
var calls = getSignaturesOfType(source, 0);
var constructs = getSignaturesOfType(source, 1);
if (calls.length > 0 && isRelatedTo(getReturnTypeOfSignature(calls[0]), target, false) ||
constructs.length > 0 && isRelatedTo(getReturnTypeOfSignature(constructs[0]), target, false)) {
reportError(ts.Diagnostics.Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it, typeToString(source), typeToString(target));
}
else {
reportError(ts.Diagnostics.Type_0_has_no_properties_in_common_with_type_1, typeToString(source), typeToString(target));
}
}
return 0;
}
var result = 0;
var saveErrorInfo = errorInfo;
var saveIsIntersectionConstituent = isIntersectionConstituent;
isIntersectionConstituent = false;
if (source.flags & 65536) {
result = relation === comparableRelation ?
someTypeRelatedToType(source, target, reportErrors && !(source.flags & 8190)) :
eachTypeRelatedToType(source, target, reportErrors && !(source.flags & 8190));
}
else {
if (target.flags & 65536) {
result = typeRelatedToSomeType(source, target, reportErrors && !(source.flags & 8190) && !(target.flags & 8190));
}
else if (target.flags & 131072) {
isIntersectionConstituent = true;
result = typeRelatedToEachType(source, target, reportErrors);
}
else if (source.flags & 131072) {
result = someTypeRelatedToType(source, target, false);
}
if (!result && (source.flags & 1032192 || target.flags & 1032192)) {
if (result = recursiveTypeRelatedTo(source, target, reportErrors)) {
errorInfo = saveErrorInfo;
}
}
}
isIntersectionConstituent = saveIsIntersectionConstituent;
if (!result && reportErrors) {
if (source.flags & 32768 && target.flags & 8190) {
tryElaborateErrorsForPrimitivesAndObjects(source, target);
}
else if (source.symbol && source.flags & 32768 && globalObjectType === source) {
reportError(ts.Diagnostics.The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead);
}
reportRelationError(headMessage, source, target);
}
return result;
}
function isIdenticalTo(source, target) {
var result;
if (source.flags & 32768 && target.flags & 32768) {
return recursiveTypeRelatedTo(source, target, false);
}
if (source.flags & 65536 && target.flags & 65536 ||
source.flags & 131072 && target.flags & 131072) {
if (result = eachTypeRelatedToSomeType(source, target)) {
if (result &= eachTypeRelatedToSomeType(target, source)) {
return result;
}
}
}
return 0;
}
function hasExcessProperties(source, target, reportErrors) {
if (maybeTypeOfKind(target, 32768) && !(getObjectFlags(target) & 512)) {
var isComparingJsxAttributes = !!(source.flags & 33554432);
if ((relation === assignableRelation || relation === comparableRelation) &&
(isTypeSubsetOf(globalObjectType, target) || (!isComparingJsxAttributes && isEmptyObjectType(target)))) {
return false;
}
if (target.flags & 65536) {
var discriminantType = findMatchingDiscriminantType(source, target);
if (discriminantType) {
return hasExcessProperties(source, discriminantType, reportErrors);
}
}
var _loop_4 = function (prop) {
if (!isKnownProperty(target, prop.escapedName, isComparingJsxAttributes)) {
if (reportErrors) {
ts.Debug.assert(!!errorNode);
if (ts.isJsxAttributes(errorNode) || ts.isJsxOpeningLikeElement(errorNode)) {
reportError(ts.Diagnostics.Property_0_does_not_exist_on_type_1, symbolToString(prop), typeToString(target));
}
else {
var objectLiteralDeclaration_1 = source.symbol && ts.firstOrUndefined(source.symbol.declarations);
var suggestion = void 0;
if (prop.valueDeclaration && ts.findAncestor(prop.valueDeclaration, function (d) { return d === objectLiteralDeclaration_1; })) {
var propDeclaration = prop.valueDeclaration;
ts.Debug.assertNode(propDeclaration, ts.isObjectLiteralElementLike);
errorNode = propDeclaration;
if (ts.isIdentifier(propDeclaration.name)) {
suggestion = getSuggestionForNonexistentProperty(propDeclaration.name, target);
}
}
if (suggestion !== undefined) {
reportError(ts.Diagnostics.Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_write_2, symbolToString(prop), typeToString(target), suggestion);
}
else {
reportError(ts.Diagnostics.Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1, symbolToString(prop), typeToString(target));
}
}
}
return { value: true };
}
};
for (var _i = 0, _a = getPropertiesOfObjectType(source); _i < _a.length; _i++) {
var prop = _a[_i];
var state_2 = _loop_4(prop);
if (typeof state_2 === "object")
return state_2.value;
}
}
return false;
}
function eachTypeRelatedToSomeType(source, target) {
var result = -1;
var sourceTypes = source.types;
for (var _i = 0, sourceTypes_1 = sourceTypes; _i < sourceTypes_1.length; _i++) {
var sourceType = sourceTypes_1[_i];
var related = typeRelatedToSomeType(sourceType, target, false);
if (!related) {
return 0;
}
result &= related;
}
return result;
}
function typeRelatedToSomeType(source, target, reportErrors) {
var targetTypes = target.types;
if (target.flags & 65536 && containsType(targetTypes, source)) {
return -1;
}
for (var _i = 0, targetTypes_1 = targetTypes; _i < targetTypes_1.length; _i++) {
var type = targetTypes_1[_i];
var related = isRelatedTo(source, type, false);
if (related) {
return related;
}
}
if (reportErrors) {
var discriminantType = findMatchingDiscriminantType(source, target);
isRelatedTo(source, discriminantType || targetTypes[targetTypes.length - 1], true);
}
return 0;
}
function findMatchingDiscriminantType(source, target) {
var match;
var sourceProperties = getPropertiesOfObjectType(source);
if (sourceProperties) {
var sourceProperty = findSingleDiscriminantProperty(sourceProperties, target);
if (sourceProperty) {
var sourceType = getTypeOfSymbol(sourceProperty);
for (var _i = 0, _a = target.types; _i < _a.length; _i++) {
var type = _a[_i];
var targetType = getTypeOfPropertyOfType(type, sourceProperty.escapedName);
if (targetType && isRelatedTo(sourceType, targetType)) {
if (match) {
return undefined;
}
match = type;
}
}
}
}
return match;
}
function typeRelatedToEachType(source, target, reportErrors) {
var result = -1;
var targetTypes = target.types;
for (var _i = 0, targetTypes_2 = targetTypes; _i < targetTypes_2.length; _i++) {
var targetType = targetTypes_2[_i];
var related = isRelatedTo(source, targetType, reportErrors);
if (!related) {
return 0;
}
result &= related;
}
return result;
}
function someTypeRelatedToType(source, target, reportErrors) {
var sourceTypes = source.types;
if (source.flags & 65536 && containsType(sourceTypes, target)) {
return -1;
}
var len = sourceTypes.length;
for (var i = 0; i < len; i++) {
var related = isRelatedTo(sourceTypes[i], target, reportErrors && i === len - 1);
if (related) {
return related;
}
}
return 0;
}
function eachTypeRelatedToType(source, target, reportErrors) {
var result = -1;
var sourceTypes = source.types;
for (var _i = 0, sourceTypes_2 = sourceTypes; _i < sourceTypes_2.length; _i++) {
var sourceType = sourceTypes_2[_i];
var related = isRelatedTo(sourceType, target, reportErrors);
if (!related) {
return 0;
}
result &= related;
}
return result;
}
function typeArgumentsRelatedTo(source, target, variances, reportErrors) {
var sources = source.typeArguments || ts.emptyArray;
var targets = target.typeArguments || ts.emptyArray;
if (sources.length !== targets.length && relation === identityRelation) {
return 0;
}
var length = sources.length <= targets.length ? sources.length : targets.length;
var result = -1;
for (var i = 0; i < length; i++) {
var variance = i < variances.length ? variances[i] : 1;
if (variance !== 4) {
var s = sources[i];
var t = targets[i];
var related = -1;
if (variance === 1) {
related = isRelatedTo(s, t, reportErrors);
}
else if (variance === 2) {
related = isRelatedTo(t, s, reportErrors);
}
else if (variance === 3) {
related = isRelatedTo(t, s, false);
if (!related) {
related = isRelatedTo(s, t, reportErrors);
}
}
else {
related = isRelatedTo(s, t, reportErrors);
if (related) {
related &= isRelatedTo(t, s, reportErrors);
}
}
if (!related) {
return 0;
}
result &= related;
}
}
return result;
}
function recursiveTypeRelatedTo(source, target, reportErrors) {
if (overflow) {
return 0;
}
var id = getRelationKey(source, target, relation);
var related = relation.get(id);
if (related !== undefined) {
if (reportErrors && related === 2) {
relation.set(id, 3);
}
else {
return related === 1 ? -1 : 0;
}
}
if (!maybeKeys) {
maybeKeys = [];
sourceStack = [];
targetStack = [];
}
else {
for (var i = 0; i < maybeCount; i++) {
if (id === maybeKeys[i]) {
return 1;
}
}
if (depth === 100) {
overflow = true;
return 0;
}
}
var maybeStart = maybeCount;
maybeKeys[maybeCount] = id;
maybeCount++;
sourceStack[depth] = source;
targetStack[depth] = target;
depth++;
var saveExpandingFlags = expandingFlags;
if (!(expandingFlags & 1) && isDeeplyNestedType(source, sourceStack, depth))
expandingFlags |= 1;
if (!(expandingFlags & 2) && isDeeplyNestedType(target, targetStack, depth))
expandingFlags |= 2;
var result = expandingFlags !== 3 ? structuredTypeRelatedTo(source, target, reportErrors) : 1;
expandingFlags = saveExpandingFlags;
depth--;
if (result) {
if (result === -1 || depth === 0) {
for (var i = maybeStart; i < maybeCount; i++) {
relation.set(maybeKeys[i], 1);
}
maybeCount = maybeStart;
}
}
else {
relation.set(id, reportErrors ? 3 : 2);
maybeCount = maybeStart;
}
return result;
}
function structuredTypeRelatedTo(source, target, reportErrors) {
var result;
var saveErrorInfo = errorInfo;
if (target.flags & 16384) {
if (getObjectFlags(source) & 32 && getConstraintTypeFromMappedType(source) === getIndexType(target)) {
if (!source.declaration.questionToken) {
var templateType = getTemplateTypeFromMappedType(source);
var indexedAccessType = getIndexedAccessType(target, getTypeParameterFromMappedType(source));
if (result = isRelatedTo(templateType, indexedAccessType, reportErrors)) {
return result;
}
}
}
}
else if (target.flags & 262144) {
if (source.flags & 262144) {
if (result = isRelatedTo(target.type, source.type, false)) {
return result;
}
}
var constraint = getConstraintOfType(target.type);
if (constraint) {
if (result = isRelatedTo(source, getIndexType(constraint), reportErrors)) {
return result;
}
}
}
else if (target.flags & 524288) {
var constraint = getConstraintOfIndexedAccess(target);
if (constraint) {
if (result = isRelatedTo(source, constraint, reportErrors)) {
errorInfo = saveErrorInfo;
return result;
}
}
}
if (source.flags & 16384) {
if (getObjectFlags(target) & 32 && getConstraintTypeFromMappedType(target) === getIndexType(source)) {
var indexedAccessType = getIndexedAccessType(source, getTypeParameterFromMappedType(target));
var templateType = getTemplateTypeFromMappedType(target);
if (result = isRelatedTo(indexedAccessType, templateType, reportErrors)) {
errorInfo = saveErrorInfo;
return result;
}
}
else {
var constraint = getConstraintOfTypeParameter(source);
if (constraint || !(target.flags & 16777216)) {
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 & 524288) {
var constraint = getConstraintOfIndexedAccess(source);
if (constraint) {
if (result = isRelatedTo(constraint, target, reportErrors)) {
errorInfo = saveErrorInfo;
return result;
}
}
else if (target.flags & 524288 && source.indexType === target.indexType) {
if (result = isRelatedTo(source.objectType, target.objectType, reportErrors)) {
return result;
}
}
}
else {
if (getObjectFlags(source) & 4 && getObjectFlags(target) & 4 && source.target === target.target &&
!(source.flags & 67108864 || target.flags & 67108864)) {
var variances = getVariances(source.target);
if (result = typeArgumentsRelatedTo(source, target, variances, reportErrors)) {
return result;
}
if (variances !== ts.emptyArray && !hasCovariantVoidArgument(target, variances)) {
if (!(reportErrors && ts.some(variances, function (v) { return v === 0; }))) {
return 0;
}
errorInfo = saveErrorInfo;
}
}
var sourceIsPrimitive = !!(source.flags & 8190);
if (relation !== identityRelation) {
source = getApparentType(source);
}
if (source.flags & (32768 | 131072) && target.flags & 32768) {
var reportStructuralErrors = reportErrors && errorInfo === saveErrorInfo && !sourceIsPrimitive;
if (isPartialMappedType(target) && !isGenericMappedType(source) && isEmptyObjectType(source)) {
result = -1;
}
else if (isGenericMappedType(target)) {
result = isGenericMappedType(source) ? mappedTypeRelatedTo(source, target, reportStructuralErrors) : 0;
}
else {
result = propertiesRelatedTo(source, target, reportStructuralErrors);
if (result) {
result &= signaturesRelatedTo(source, target, 0, reportStructuralErrors);
if (result) {
result &= signaturesRelatedTo(source, target, 1, reportStructuralErrors);
if (result) {
result &= indexTypesRelatedTo(source, target, 0, sourceIsPrimitive, reportStructuralErrors);
if (result) {
result &= indexTypesRelatedTo(source, target, 1, sourceIsPrimitive, reportStructuralErrors);
}
}
}
}
}
if (result) {
errorInfo = saveErrorInfo;
return result;
}
}
}
return 0;
}
function mappedTypeRelatedTo(source, target, reportErrors) {
var sourceReadonly = !!source.declaration.readonlyToken;
var sourceOptional = !!source.declaration.questionToken;
var targetReadonly = !!target.declaration.readonlyToken;
var targetOptional = !!target.declaration.questionToken;
var modifiersRelated = relation === identityRelation ?
sourceReadonly === targetReadonly && sourceOptional === targetOptional :
relation === comparableRelation || !sourceOptional || targetOptional;
if (modifiersRelated) {
var result_2;
if (result_2 = isRelatedTo(getConstraintTypeFromMappedType(target), getConstraintTypeFromMappedType(source), reportErrors)) {
var mapper = createTypeMapper([getTypeParameterFromMappedType(source)], [getTypeParameterFromMappedType(target)]);
return result_2 & isRelatedTo(instantiateType(getTemplateTypeFromMappedType(source), mapper), getTemplateTypeFromMappedType(target), reportErrors);
}
}
return 0;
}
function propertiesRelatedTo(source, target, reportErrors) {
if (relation === identityRelation) {
return propertiesIdenticalTo(source, target);
}
var requireOptionalProperties = relation === subtypeRelation && !(getObjectFlags(source) & 128);
var unmatchedProperty = getUnmatchedProperty(source, target, requireOptionalProperties);
if (unmatchedProperty) {
if (reportErrors) {
reportError(ts.Diagnostics.Property_0_is_missing_in_type_1, symbolToString(unmatchedProperty), typeToString(source));
}
return 0;
}
var result = -1;
var properties = getPropertiesOfObjectType(target);
for (var _i = 0, properties_3 = properties; _i < properties_3.length; _i++) {
var targetProp = properties_3[_i];
if (!(targetProp.flags & 4194304)) {
var sourceProp = getPropertyOfType(source, targetProp.escapedName);
if (sourceProp && sourceProp !== targetProp) {
var sourcePropFlags = ts.getDeclarationModifierFlagsFromSymbol(sourceProp);
var targetPropFlags = ts.getDeclarationModifierFlagsFromSymbol(targetProp);
if (sourcePropFlags & 8 || targetPropFlags & 8) {
if (ts.getCheckFlags(sourceProp) & 256) {
if (reportErrors) {
reportError(ts.Diagnostics.Property_0_has_conflicting_declarations_and_is_inaccessible_in_type_1, symbolToString(sourceProp), typeToString(source));
}
return 0;
}
if (sourceProp.valueDeclaration !== targetProp.valueDeclaration) {
if (reportErrors) {
if (sourcePropFlags & 8 && targetPropFlags & 8) {
reportError(ts.Diagnostics.Types_have_separate_declarations_of_a_private_property_0, symbolToString(targetProp));
}
else {
reportError(ts.Diagnostics.Property_0_is_private_in_type_1_but_not_in_type_2, symbolToString(targetProp), typeToString(sourcePropFlags & 8 ? source : target), typeToString(sourcePropFlags & 8 ? target : source));
}
}
return 0;
}
}
else if (targetPropFlags & 16) {
if (!isValidOverrideOf(sourceProp, targetProp)) {
if (reportErrors) {
reportError(ts.Diagnostics.Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2, symbolToString(targetProp), typeToString(getDeclaringClass(sourceProp) || source), typeToString(getDeclaringClass(targetProp) || target));
}
return 0;
}
}
else if (sourcePropFlags & 16) {
if (reportErrors) {
reportError(ts.Diagnostics.Property_0_is_protected_in_type_1_but_public_in_type_2, symbolToString(targetProp), typeToString(source), typeToString(target));
}
return 0;
}
var related = isRelatedTo(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp), reportErrors);
if (!related) {
if (reportErrors) {
reportError(ts.Diagnostics.Types_of_property_0_are_incompatible, symbolToString(targetProp));
}
return 0;
}
result &= related;
if (relation !== comparableRelation && sourceProp.flags & 16777216 && !(targetProp.flags & 16777216)) {
if (reportErrors) {
reportError(ts.Diagnostics.Property_0_is_optional_in_type_1_but_required_in_type_2, symbolToString(targetProp), typeToString(source), typeToString(target));
}
return 0;
}
}
}
}
return result;
}
function isWeakType(type) {
if (type.flags & 32768) {
var resolved = resolveStructuredTypeMembers(type);
return resolved.callSignatures.length === 0 && resolved.constructSignatures.length === 0 &&
!resolved.stringIndexInfo && !resolved.numberIndexInfo &&
resolved.properties.length > 0 &&
ts.every(resolved.properties, function (p) { return !!(p.flags & 16777216); });
}
if (type.flags & 131072) {
return ts.every(type.types, isWeakType);
}
return false;
}
function hasCommonProperties(source, target) {
var isComparingJsxAttributes = !!(source.flags & 33554432);
for (var _i = 0, _a = getPropertiesOfType(source); _i < _a.length; _i++) {
var prop = _a[_i];
if (isKnownProperty(target, prop.escapedName, isComparingJsxAttributes)) {
return true;
}
}
return false;
}
function propertiesIdenticalTo(source, target) {
if (!(source.flags & 32768 && target.flags & 32768)) {
return 0;
}
var sourceProperties = getPropertiesOfObjectType(source);
var targetProperties = getPropertiesOfObjectType(target);
if (sourceProperties.length !== targetProperties.length) {
return 0;
}
var result = -1;
for (var _i = 0, sourceProperties_1 = sourceProperties; _i < sourceProperties_1.length; _i++) {
var sourceProp = sourceProperties_1[_i];
var targetProp = getPropertyOfObjectType(target, sourceProp.escapedName);
if (!targetProp) {
return 0;
}
var related = compareProperties(sourceProp, targetProp, isRelatedTo);
if (!related) {
return 0;
}
result &= related;
}
return result;
}
function signaturesRelatedTo(source, target, kind, reportErrors) {
if (relation === identityRelation) {
return signaturesIdenticalTo(source, target, kind);
}
if (target === anyFunctionType || source === anyFunctionType) {
return -1;
}
var sourceSignatures = getSignaturesOfType(source, kind);
var targetSignatures = getSignaturesOfType(target, kind);
if (kind === 1 && sourceSignatures.length && targetSignatures.length) {
if (isAbstractConstructorType(source) && !isAbstractConstructorType(target)) {
if (reportErrors) {
reportError(ts.Diagnostics.Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type);
}
return 0;
}
if (!constructorVisibilitiesAreCompatible(sourceSignatures[0], targetSignatures[0], reportErrors)) {
return 0;
}
}
var result = -1;
var saveErrorInfo = errorInfo;
if (getObjectFlags(source) & 64 && getObjectFlags(target) & 64 && source.symbol === target.symbol) {
for (var i = 0; i < targetSignatures.length; i++) {
var related = signatureRelatedTo(sourceSignatures[i], targetSignatures[i], true, reportErrors);
if (!related) {
return 0;
}
result &= related;
}
}
else if (sourceSignatures.length === 1 && targetSignatures.length === 1) {
var eraseGenerics = relation === comparableRelation || compilerOptions.noStrictGenericChecks;
result = signatureRelatedTo(sourceSignatures[0], targetSignatures[0], eraseGenerics, reportErrors);
}
else {
outer: for (var _i = 0, targetSignatures_1 = targetSignatures; _i < targetSignatures_1.length; _i++) {
var t = targetSignatures_1[_i];
var shouldElaborateErrors = reportErrors;
for (var _a = 0, sourceSignatures_1 = sourceSignatures; _a < sourceSignatures_1.length; _a++) {
var s = sourceSignatures_1[_a];
var related = signatureRelatedTo(s, t, true, shouldElaborateErrors);
if (related) {
result &= related;
errorInfo = saveErrorInfo;
continue outer;
}
shouldElaborateErrors = false;
}
if (shouldElaborateErrors) {
reportError(ts.Diagnostics.Type_0_provides_no_match_for_the_signature_1, typeToString(source), signatureToString(t, undefined, undefined, kind));
}
return 0;
}
}
return result;
}
function signatureRelatedTo(source, target, erase, reportErrors) {
return compareSignaturesRelated(erase ? getErasedSignature(source) : source, erase ? getErasedSignature(target) : target, 0, false, reportErrors, reportError, isRelatedTo);
}
function signaturesIdenticalTo(source, target, kind) {
var sourceSignatures = getSignaturesOfType(source, kind);
var targetSignatures = getSignaturesOfType(target, kind);
if (sourceSignatures.length !== targetSignatures.length) {
return 0;
}
var result = -1;
for (var i = 0; i < sourceSignatures.length; i++) {
var related = compareSignaturesIdentical(sourceSignatures[i], targetSignatures[i], false, false, false, isRelatedTo);
if (!related) {
return 0;
}
result &= related;
}
return result;
}
function eachPropertyRelatedTo(source, target, kind, reportErrors) {
var result = -1;
for (var _i = 0, _a = getPropertiesOfObjectType(source); _i < _a.length; _i++) {
var prop = _a[_i];
if (kind === 0 || isNumericLiteralName(prop.escapedName)) {
var related = isRelatedTo(getTypeOfSymbol(prop), target, reportErrors);
if (!related) {
if (reportErrors) {
reportError(ts.Diagnostics.Property_0_is_incompatible_with_index_signature, symbolToString(prop));
}
return 0;
}
result &= related;
}
}
return result;
}
function indexInfoRelatedTo(sourceInfo, targetInfo, reportErrors) {
var related = isRelatedTo(sourceInfo.type, targetInfo.type, reportErrors);
if (!related && reportErrors) {
reportError(ts.Diagnostics.Index_signatures_are_incompatible);
}
return related;
}
function indexTypesRelatedTo(source, target, kind, sourceIsPrimitive, reportErrors) {
if (relation === identityRelation) {
return indexTypesIdenticalTo(source, target, kind);
}
var targetInfo = getIndexInfoOfType(target, kind);
if (!targetInfo || targetInfo.type.flags & 1 && !sourceIsPrimitive) {
return -1;
}
var sourceInfo = getIndexInfoOfType(source, kind) ||
kind === 1 && getIndexInfoOfType(source, 0);
if (sourceInfo) {
return indexInfoRelatedTo(sourceInfo, targetInfo, reportErrors);
}
if (isGenericMappedType(source)) {
return kind === 0 && isRelatedTo(getTemplateTypeFromMappedType(source), targetInfo.type, reportErrors);
}
if (isObjectTypeWithInferableIndex(source)) {
var related = -1;
if (kind === 0) {
var sourceNumberInfo = getIndexInfoOfType(source, 1);
if (sourceNumberInfo) {
related = indexInfoRelatedTo(sourceNumberInfo, targetInfo, reportErrors);
}
}
if (related) {
related &= eachPropertyRelatedTo(source, targetInfo.type, kind, reportErrors);
}
return related;
}
if (reportErrors) {
reportError(ts.Diagnostics.Index_signature_is_missing_in_type_0, typeToString(source));
}
return 0;
}
function indexTypesIdenticalTo(source, target, indexKind) {
var targetInfo = getIndexInfoOfType(target, indexKind);
var sourceInfo = getIndexInfoOfType(source, indexKind);
if (!sourceInfo && !targetInfo) {
return -1;
}
if (sourceInfo && targetInfo && sourceInfo.isReadonly === targetInfo.isReadonly) {
return isRelatedTo(sourceInfo.type, targetInfo.type);
}
return 0;
}
function constructorVisibilitiesAreCompatible(sourceSignature, targetSignature, reportErrors) {
if (!sourceSignature.declaration || !targetSignature.declaration) {
return true;
}
var sourceAccessibility = ts.getSelectedModifierFlags(sourceSignature.declaration, 24);
var targetAccessibility = ts.getSelectedModifierFlags(targetSignature.declaration, 24);
if (targetAccessibility === 8) {
return true;
}
if (targetAccessibility === 16 && sourceAccessibility !== 8) {
return true;
}
if (targetAccessibility !== 16 && !sourceAccessibility) {
return true;
}
if (reportErrors) {
reportError(ts.Diagnostics.Cannot_assign_a_0_constructor_type_to_a_1_constructor_type, visibilityToString(sourceAccessibility), visibilityToString(targetAccessibility));
}
return false;
}
}
function getMarkerTypeReference(type, source, target) {
var result = createTypeReference(type, ts.map(type.typeParameters, function (t) { return t === source ? target : t; }));
result.flags |= 67108864;
return result;
}
function getVariances(type) {
if (!strictFunctionTypes) {
return ts.emptyArray;
}
var typeParameters = type.typeParameters || ts.emptyArray;
var variances = type.variances;
if (!variances) {
if (type === globalArrayType || type === globalReadonlyArrayType) {
variances = [1];
}
else {
type.variances = ts.emptyArray;
variances = [];
for (var _i = 0, typeParameters_1 = typeParameters; _i < typeParameters_1.length; _i++) {
var tp = typeParameters_1[_i];
var typeWithSuper = getMarkerTypeReference(type, tp, markerSuperType);
var typeWithSub = getMarkerTypeReference(type, tp, markerSubType);
var variance = (isTypeAssignableTo(typeWithSub, typeWithSuper) ? 1 : 0) |
(isTypeAssignableTo(typeWithSuper, typeWithSub) ? 2 : 0);
if (variance === 3 && isTypeAssignableTo(getMarkerTypeReference(type, tp, markerOtherType), typeWithSuper)) {
variance = 4;
}
variances.push(variance);
}
}
type.variances = variances;
}
return variances;
}
function hasCovariantVoidArgument(type, variances) {
for (var i = 0; i < variances.length; i++) {
if (variances[i] === 1 && type.typeArguments[i].flags & 1024) {
return true;
}
}
return false;
}
function isUnconstrainedTypeParameter(type) {
return type.flags & 16384 && !getConstraintFromTypeParameter(type);
}
function isTypeReferenceWithGenericArguments(type) {
return getObjectFlags(type) & 4 && ts.some(type.typeArguments, function (t) { return isUnconstrainedTypeParameter(t) || isTypeReferenceWithGenericArguments(t); });
}
function getTypeReferenceId(type, typeParameters, depth) {
if (depth === void 0) { depth = 0; }
var result = "" + type.target.id;
for (var _i = 0, _a = type.typeArguments; _i < _a.length; _i++) {
var t = _a[_i];
if (isUnconstrainedTypeParameter(t)) {
var index = ts.indexOf(typeParameters, t);
if (index < 0) {
index = typeParameters.length;
typeParameters.push(t);
}
result += "=" + index;
}
else if (depth < 4 && isTypeReferenceWithGenericArguments(t)) {
result += "<" + getTypeReferenceId(t, typeParameters, depth + 1) + ">";
}
else {
result += "-" + t.id;
}
}
return result;
}
function getRelationKey(source, target, relation) {
if (relation === identityRelation && source.id > target.id) {
var temp = source;
source = target;
target = temp;
}
if (isTypeReferenceWithGenericArguments(source) && isTypeReferenceWithGenericArguments(target)) {
var typeParameters = [];
return getTypeReferenceId(source, typeParameters) + "," + getTypeReferenceId(target, typeParameters);
}
return source.id + "," + target.id;
}
function forEachProperty(prop, callback) {
if (ts.getCheckFlags(prop) & 6) {
for (var _i = 0, _a = prop.containingType.types; _i < _a.length; _i++) {
var t = _a[_i];
var p = getPropertyOfType(t, prop.escapedName);
var result = p && forEachProperty(p, callback);
if (result) {
return result;
}
}
return undefined;
}
return callback(prop);
}
function getDeclaringClass(prop) {
return prop.parent && prop.parent.flags & 32 ? getDeclaredTypeOfSymbol(getParentOfSymbol(prop)) : undefined;
}
function isPropertyInClassDerivedFrom(prop, baseClass) {
return forEachProperty(prop, function (sp) {
var sourceClass = getDeclaringClass(sp);
return sourceClass ? hasBaseType(sourceClass, baseClass) : false;
});
}
function isValidOverrideOf(sourceProp, targetProp) {
return !forEachProperty(targetProp, function (tp) { return ts.getDeclarationModifierFlagsFromSymbol(tp) & 16 ?
!isPropertyInClassDerivedFrom(sourceProp, getDeclaringClass(tp)) : false; });
}
function isClassDerivedFromDeclaringClasses(checkClass, prop) {
return forEachProperty(prop, function (p) { return ts.getDeclarationModifierFlagsFromSymbol(p) & 16 ?
!hasBaseType(checkClass, getDeclaringClass(p)) : false; }) ? undefined : checkClass;
}
function isAbstractConstructorType(type) {
if (getObjectFlags(type) & 16) {
var symbol = type.symbol;
if (symbol && symbol.flags & 32) {
var declaration = getClassLikeDeclarationOfSymbol(symbol);
if (declaration && ts.hasModifier(declaration, 128)) {
return true;
}
}
}
return false;
}
function isDeeplyNestedType(type, stack, depth) {
if (depth >= 5 && type.flags & 32768) {
var symbol = type.symbol;
if (symbol) {
var count = 0;
for (var i = 0; i < depth; i++) {
var t = stack[i];
if (t.flags & 32768 && t.symbol === symbol) {
count++;
if (count >= 5)
return true;
}
}
}
}
return false;
}
function isPropertyIdenticalTo(sourceProp, targetProp) {
return compareProperties(sourceProp, targetProp, compareTypesIdentical) !== 0;
}
function compareProperties(sourceProp, targetProp, compareTypes) {
if (sourceProp === targetProp) {
return -1;
}
var sourcePropAccessibility = ts.getDeclarationModifierFlagsFromSymbol(sourceProp) & 24;
var targetPropAccessibility = ts.getDeclarationModifierFlagsFromSymbol(targetProp) & 24;
if (sourcePropAccessibility !== targetPropAccessibility) {
return 0;
}
if (sourcePropAccessibility) {
if (getTargetSymbol(sourceProp) !== getTargetSymbol(targetProp)) {
return 0;
}
}
else {
if ((sourceProp.flags & 16777216) !== (targetProp.flags & 16777216)) {
return 0;
}
}
if (isReadonlySymbol(sourceProp) !== isReadonlySymbol(targetProp)) {
return 0;
}
return compareTypes(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp));
}
function isMatchingSignature(source, target, partialMatch) {
if (source.parameters.length === target.parameters.length &&
source.minArgumentCount === target.minArgumentCount &&
source.hasRestParameter === target.hasRestParameter) {
return true;
}
var sourceRestCount = source.hasRestParameter ? 1 : 0;
var targetRestCount = target.hasRestParameter ? 1 : 0;
if (partialMatch && source.minArgumentCount <= target.minArgumentCount && (sourceRestCount > targetRestCount ||
sourceRestCount === targetRestCount && source.parameters.length >= target.parameters.length)) {
return true;
}
return false;
}
function compareSignaturesIdentical(source, target, partialMatch, ignoreThisTypes, ignoreReturnTypes, compareTypes) {
if (source === target) {
return -1;
}
if (!(isMatchingSignature(source, target, partialMatch))) {
return 0;
}
if (ts.length(source.typeParameters) !== ts.length(target.typeParameters)) {
return 0;
}
source = getErasedSignature(source);
target = getErasedSignature(target);
var result = -1;
if (!ignoreThisTypes) {
var sourceThisType = getThisTypeOfSignature(source);
if (sourceThisType) {
var targetThisType = getThisTypeOfSignature(target);
if (targetThisType) {
var related = compareTypes(sourceThisType, targetThisType);
if (!related) {
return 0;
}
result &= related;
}
}
}
var targetLen = target.parameters.length;
for (var i = 0; i < targetLen; i++) {
var s = isRestParameterIndex(source, i) ? getRestTypeOfSignature(source) : getTypeOfParameter(source.parameters[i]);
var t = isRestParameterIndex(target, i) ? getRestTypeOfSignature(target) : getTypeOfParameter(target.parameters[i]);
var related = compareTypes(s, t);
if (!related) {
return 0;
}
result &= related;
}
if (!ignoreReturnTypes) {
result &= compareTypes(getReturnTypeOfSignature(source), getReturnTypeOfSignature(target));
}
return result;
}
function isRestParameterIndex(signature, parameterIndex) {
return signature.hasRestParameter && parameterIndex >= signature.parameters.length - 1;
}
function literalTypesWithSameBaseType(types) {
var commonBaseType;
for (var _i = 0, types_10 = types; _i < types_10.length; _i++) {
var t = types_10[_i];
var baseType = getBaseTypeOfLiteralType(t);
if (!commonBaseType) {
commonBaseType = baseType;
}
if (baseType === t || baseType !== commonBaseType) {
return false;
}
}
return true;
}
function getSupertypeOrUnion(types) {
return literalTypesWithSameBaseType(types) ?
getUnionType(types) :
ts.reduceLeft(types, function (s, t) { return isTypeSubtypeOf(s, t) ? t : s; });
}
function getCommonSupertype(types) {
if (!strictNullChecks) {
return getSupertypeOrUnion(types);
}
var primaryTypes = ts.filter(types, function (t) { return !(t.flags & 6144); });
return primaryTypes.length ?
getNullableType(getSupertypeOrUnion(primaryTypes), getFalsyFlagsOfTypes(types) & 6144) :
getUnionType(types, true);
}
function getCommonSubtype(types) {
return ts.reduceLeft(types, function (s, t) { return isTypeSubtypeOf(t, s) ? t : s; });
}
function isArrayType(type) {
return getObjectFlags(type) & 4 && type.target === globalArrayType;
}
function isArrayLikeType(type) {
return getObjectFlags(type) & 4 && (type.target === globalArrayType || type.target === globalReadonlyArrayType) ||
!(type.flags & 6144) && isTypeAssignableTo(type, anyReadonlyArrayType);
}
function isTupleLikeType(type) {
return !!getPropertyOfType(type, "0");
}
function isUnitType(type) {
return !!(type.flags & 6368);
}
function isLiteralType(type) {
return type.flags & 8 ? true :
type.flags & 65536 ? type.flags & 256 ? true : !ts.forEach(type.types, function (t) { return !isUnitType(t); }) :
isUnitType(type);
}
function getBaseTypeOfLiteralType(type) {
return type.flags & 256 ? getBaseTypeOfEnumLiteralType(type) :
type.flags & 32 ? stringType :
type.flags & 64 ? numberType :
type.flags & 128 ? booleanType :
type.flags & 65536 ? getUnionType(ts.sameMap(type.types, getBaseTypeOfLiteralType)) :
type;
}
function getWidenedLiteralType(type) {
return type.flags & 256 ? getBaseTypeOfEnumLiteralType(type) :
type.flags & 32 && type.flags & 1048576 ? stringType :
type.flags & 64 && type.flags & 1048576 ? numberType :
type.flags & 128 ? booleanType :
type.flags & 65536 ? getUnionType(ts.sameMap(type.types, getWidenedLiteralType)) :
type;
}
function isTupleType(type) {
return !!(getObjectFlags(type) & 4 && type.target.objectFlags & 8);
}
function getFalsyFlagsOfTypes(types) {
var result = 0;
for (var _i = 0, types_11 = types; _i < types_11.length; _i++) {
var t = types_11[_i];
result |= getFalsyFlags(t);
}
return result;
}
function getFalsyFlags(type) {
return type.flags & 65536 ? getFalsyFlagsOfTypes(type.types) :
type.flags & 32 ? type.value === "" ? 32 : 0 :
type.flags & 64 ? type.value === 0 ? 64 : 0 :
type.flags & 128 ? type === falseType ? 128 : 0 :
type.flags & 7406;
}
function removeDefinitelyFalsyTypes(type) {
return getFalsyFlags(type) & 7392 ?
filterType(type, function (t) { return !(getFalsyFlags(t) & 7392); }) :
type;
}
function extractDefinitelyFalsyTypes(type) {
return mapType(type, getDefinitelyFalsyPartOfType);
}
function getDefinitelyFalsyPartOfType(type) {
return type.flags & 2 ? emptyStringType :
type.flags & 4 ? zeroType :
type.flags & 8 || type === falseType ? falseType :
type.flags & (1024 | 2048 | 4096) ||
type.flags & 32 && type.value === "" ||
type.flags & 64 && type.value === 0 ? type :
neverType;
}
function getNullableType(type, flags) {
var missing = (flags & ~type.flags) & (2048 | 4096);
return missing === 0 ? type :
missing === 2048 ? getUnionType([type, undefinedType]) :
missing === 4096 ? getUnionType([type, nullType]) :
getUnionType([type, undefinedType, nullType]);
}
function getNonNullableType(type) {
return strictNullChecks ? getTypeWithFacts(type, 524288) : type;
}
function isObjectTypeWithInferableIndex(type) {
return type.symbol && (type.symbol.flags & (4096 | 2048 | 512)) !== 0 &&
getSignaturesOfType(type, 0).length === 0 &&
getSignaturesOfType(type, 1).length === 0;
}
function createSymbolWithType(source, type) {
var symbol = createSymbol(source.flags, source.escapedName);
symbol.declarations = source.declarations;
symbol.parent = source.parent;
symbol.type = type;
symbol.target = source;
if (source.valueDeclaration) {
symbol.valueDeclaration = source.valueDeclaration;
}
return symbol;
}
function transformTypeOfMembers(type, f) {
var members = ts.createSymbolTable();
for (var _i = 0, _a = getPropertiesOfObjectType(type); _i < _a.length; _i++) {
var property = _a[_i];
var original = getTypeOfSymbol(property);
var updated = f(original);
members.set(property.escapedName, updated === original ? property : createSymbolWithType(property, updated));
}
return members;
}
function getRegularTypeOfObjectLiteral(type) {
if (!(getObjectFlags(type) & 128 && type.flags & 1048576)) {
return type;
}
var regularType = type.regularType;
if (regularType) {
return regularType;
}
var resolved = type;
var members = transformTypeOfMembers(type, getRegularTypeOfObjectLiteral);
var regularNew = createAnonymousType(resolved.symbol, members, resolved.callSignatures, resolved.constructSignatures, resolved.stringIndexInfo, resolved.numberIndexInfo);
regularNew.flags = resolved.flags & ~1048576;
regularNew.objectFlags |= 128;
type.regularType = regularNew;
return regularNew;
}
function getWidenedProperty(prop) {
var original = getTypeOfSymbol(prop);
var widened = getWidenedType(original);
return widened === original ? prop : createSymbolWithType(prop, widened);
}
function getWidenedTypeOfObjectLiteral(type) {
var members = ts.createSymbolTable();
for (var _i = 0, _a = getPropertiesOfObjectType(type); _i < _a.length; _i++) {
var prop = _a[_i];
members.set(prop.escapedName, prop.flags & 4 ? getWidenedProperty(prop) : prop);
}
var stringIndexInfo = getIndexInfoOfType(type, 0);
var numberIndexInfo = getIndexInfoOfType(type, 1);
return createAnonymousType(type.symbol, members, ts.emptyArray, ts.emptyArray, stringIndexInfo && createIndexInfo(getWidenedType(stringIndexInfo.type), stringIndexInfo.isReadonly), numberIndexInfo && createIndexInfo(getWidenedType(numberIndexInfo.type), numberIndexInfo.isReadonly));
}
function getWidenedConstituentType(type) {
return type.flags & 6144 ? type : getWidenedType(type);
}
function getWidenedType(type) {
if (type.flags & 6291456) {
if (type.flags & 6144) {
return anyType;
}
if (getObjectFlags(type) & 128) {
return getWidenedTypeOfObjectLiteral(type);
}
if (type.flags & 65536) {
return getUnionType(ts.sameMap(type.types, getWidenedConstituentType));
}
if (isArrayType(type) || isTupleType(type)) {
return createTypeReference(type.target, ts.sameMap(type.typeArguments, getWidenedType));
}
}
return type;
}
function reportWideningErrorsInType(type) {
var errorReported = false;
if (type.flags & 65536) {
for (var _i = 0, _a = type.types; _i < _a.length; _i++) {
var t = _a[_i];
if (reportWideningErrorsInType(t)) {
errorReported = true;
}
}
}
if (isArrayType(type) || isTupleType(type)) {
for (var _b = 0, _c = type.typeArguments; _b < _c.length; _b++) {
var t = _c[_b];
if (reportWideningErrorsInType(t)) {
errorReported = true;
}
}
}
if (getObjectFlags(type) & 128) {
for (var _d = 0, _e = getPropertiesOfObjectType(type); _d < _e.length; _d++) {
var p = _e[_d];
var t = getTypeOfSymbol(p);
if (t.flags & 2097152) {
if (!reportWideningErrorsInType(t)) {
error(p.valueDeclaration, ts.Diagnostics.Object_literal_s_property_0_implicitly_has_an_1_type, ts.symbolName(p), typeToString(getWidenedType(t)));
}
errorReported = true;
}
}
}
return errorReported;
}
function reportImplicitAnyError(declaration, type) {
var typeAsString = typeToString(getWidenedType(type));
var diagnostic;
switch (declaration.kind) {
case 149:
case 148:
diagnostic = ts.Diagnostics.Member_0_implicitly_has_an_1_type;
break;
case 146:
diagnostic = declaration.dotDotDotToken ?
ts.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type :
ts.Diagnostics.Parameter_0_implicitly_has_an_1_type;
break;
case 176:
diagnostic = ts.Diagnostics.Binding_element_0_implicitly_has_an_1_type;
break;
case 228:
case 151:
case 150:
case 153:
case 154:
case 186:
case 187:
if (!declaration.name) {
error(declaration, ts.Diagnostics.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeAsString);
return;
}
diagnostic = ts.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type;
break;
default:
diagnostic = ts.Diagnostics.Variable_0_implicitly_has_an_1_type;
}
error(declaration, diagnostic, ts.declarationNameToString(ts.getNameOfDeclaration(declaration)), typeAsString);
}
function reportErrorsFromWidening(declaration, type) {
if (produceDiagnostics && noImplicitAny && type.flags & 2097152) {
if (!reportWideningErrorsInType(type)) {
reportImplicitAnyError(declaration, type);
}
}
}
function forEachMatchingParameterType(source, target, callback) {
var sourceMax = source.parameters.length;
var targetMax = target.parameters.length;
var count;
if (source.hasRestParameter && target.hasRestParameter) {
count = Math.max(sourceMax, targetMax);
}
else if (source.hasRestParameter) {
count = targetMax;
}
else if (target.hasRestParameter) {
count = sourceMax;
}
else {
count = Math.min(sourceMax, targetMax);
}
for (var i = 0; i < count; i++) {
callback(getTypeAtPosition(source, i), getTypeAtPosition(target, i));
}
}
function createInferenceContext(signature, flags, compareTypes, baseInferences) {
var inferences = baseInferences ? ts.map(baseInferences, cloneInferenceInfo) : ts.map(signature.typeParameters, createInferenceInfo);
var context = mapper;
context.signature = signature;
context.inferences = inferences;
context.flags = flags;
context.compareTypes = compareTypes || compareTypesAssignable;
return context;
function mapper(t) {
for (var i = 0; i < inferences.length; i++) {
if (t === inferences[i].typeParameter) {
inferences[i].isFixed = true;
return getInferredType(context, i);
}
}
return t;
}
}
function createInferenceInfo(typeParameter) {
return {
typeParameter: typeParameter,
candidates: undefined,
inferredType: undefined,
priority: undefined,
topLevel: true,
isFixed: false
};
}
function cloneInferenceInfo(inference) {
return {
typeParameter: inference.typeParameter,
candidates: inference.candidates && inference.candidates.slice(),
inferredType: inference.inferredType,
priority: inference.priority,
topLevel: inference.topLevel,
isFixed: inference.isFixed
};
}
function couldContainTypeVariables(type) {
var objectFlags = getObjectFlags(type);
return !!(type.flags & (540672 | 262144) ||
objectFlags & 4 && ts.forEach(type.typeArguments, couldContainTypeVariables) ||
objectFlags & 16 && type.symbol && type.symbol.flags & (16 | 8192 | 2048 | 32) ||
objectFlags & 32 ||
type.flags & 196608 && couldUnionOrIntersectionContainTypeVariables(type));
}
function couldUnionOrIntersectionContainTypeVariables(type) {
if (type.couldContainTypeVariables === undefined) {
type.couldContainTypeVariables = ts.forEach(type.types, couldContainTypeVariables);
}
return type.couldContainTypeVariables;
}
function isTypeParameterAtTopLevel(type, typeParameter) {
return type === typeParameter || type.flags & 196608 && ts.forEach(type.types, function (t) { return isTypeParameterAtTopLevel(t, typeParameter); });
}
function inferTypeForHomomorphicMappedType(source, target) {
var properties = getPropertiesOfType(source);
var indexInfo = getIndexInfoOfType(source, 0);
if (properties.length === 0 && !indexInfo) {
return undefined;
}
var typeParameter = getIndexedAccessType(getConstraintTypeFromMappedType(target).type, getTypeParameterFromMappedType(target));
var inference = createInferenceInfo(typeParameter);
var inferences = [inference];
var templateType = getTemplateTypeFromMappedType(target);
var readonlyMask = target.declaration.readonlyToken ? false : true;
var optionalMask = target.declaration.questionToken ? 0 : 16777216;
var members = ts.createSymbolTable();
for (var _i = 0, properties_4 = properties; _i < properties_4.length; _i++) {
var prop = properties_4[_i];
var inferredPropType = inferTargetType(getTypeOfSymbol(prop));
if (!inferredPropType) {
return undefined;
}
var inferredProp = createSymbol(4 | prop.flags & optionalMask, prop.escapedName);
inferredProp.checkFlags = readonlyMask && isReadonlySymbol(prop) ? 8 : 0;
inferredProp.declarations = prop.declarations;
inferredProp.type = inferredPropType;
members.set(prop.escapedName, inferredProp);
}
if (indexInfo) {
var inferredIndexType = inferTargetType(indexInfo.type);
if (!inferredIndexType) {
return undefined;
}
indexInfo = createIndexInfo(inferredIndexType, readonlyMask && indexInfo.isReadonly);
}
return createAnonymousType(undefined, members, ts.emptyArray, ts.emptyArray, indexInfo, undefined);
function inferTargetType(sourceType) {
inference.candidates = undefined;
inferTypes(inferences, sourceType, templateType);
return inference.candidates && getUnionType(inference.candidates, true);
}
}
function getUnmatchedProperty(source, target, requireOptionalProperties) {
var properties = getPropertiesOfObjectType(target);
for (var _i = 0, properties_5 = properties; _i < properties_5.length; _i++) {
var targetProp = properties_5[_i];
if (requireOptionalProperties || !(targetProp.flags & 16777216)) {
var sourceProp = getPropertyOfType(source, targetProp.escapedName);
if (!sourceProp) {
return targetProp;
}
}
}
return undefined;
}
function inferTypes(inferences, originalSource, originalTarget, priority) {
if (priority === void 0) { priority = 0; }
var symbolStack;
var visited;
inferFromTypes(originalSource, originalTarget);
function inferFromTypes(source, target) {
if (!couldContainTypeVariables(target)) {
return;
}
if (source.aliasSymbol && source.aliasTypeArguments && source.aliasSymbol === target.aliasSymbol) {
var sourceTypes = source.aliasTypeArguments;
var targetTypes = target.aliasTypeArguments;
for (var i = 0; i < sourceTypes.length; i++) {
inferFromTypes(sourceTypes[i], targetTypes[i]);
}
return;
}
if (source.flags & 65536 && target.flags & 65536 && !(source.flags & 256 && target.flags & 256) ||
source.flags & 131072 && target.flags & 131072) {
if (source === target) {
for (var _i = 0, _a = source.types; _i < _a.length; _i++) {
var t = _a[_i];
inferFromTypes(t, t);
}
return;
}
var matchingTypes = void 0;
for (var _b = 0, _c = source.types; _b < _c.length; _b++) {
var t = _c[_b];
if (typeIdenticalToSomeType(t, target.types)) {
(matchingTypes || (matchingTypes = [])).push(t);
inferFromTypes(t, t);
}
else if (t.flags & (64 | 32)) {
var b = getBaseTypeOfLiteralType(t);
if (typeIdenticalToSomeType(b, target.types)) {
(matchingTypes || (matchingTypes = [])).push(t, b);
}
}
}
if (matchingTypes) {
source = removeTypesFromUnionOrIntersection(source, matchingTypes);
target = removeTypesFromUnionOrIntersection(target, matchingTypes);
}
}
if (target.flags & 540672) {
if (source.flags & 8388608 || source === silentNeverType) {
return;
}
var inference = getInferenceInfoForType(target);
if (inference) {
if (!inference.isFixed) {
if (!inference.candidates || priority < inference.priority) {
inference.candidates = [source];
inference.priority = priority;
}
else if (priority === inference.priority) {
inference.candidates.push(source);
}
if (!(priority & 8) && target.flags & 16384 && !isTypeParameterAtTopLevel(originalTarget, target)) {
inference.topLevel = false;
}
}
return;
}
}
else if (getObjectFlags(source) & 4 && getObjectFlags(target) & 4 && source.target === target.target) {
var sourceTypes = source.typeArguments || ts.emptyArray;
var targetTypes = target.typeArguments || ts.emptyArray;
var count = sourceTypes.length < targetTypes.length ? sourceTypes.length : targetTypes.length;
var variances = getVariances(source.target);
for (var i = 0; i < count; i++) {
if (i < variances.length && variances[i] === 2) {
inferFromContravariantTypes(sourceTypes[i], targetTypes[i]);
}
else {
inferFromTypes(sourceTypes[i], targetTypes[i]);
}
}
}
else if (source.flags & 262144 && target.flags & 262144) {
inferFromTypes(source.type, target.type);
}
else if (source.flags & 524288 && target.flags & 524288) {
inferFromTypes(source.objectType, target.objectType);
inferFromTypes(source.indexType, target.indexType);
}
else if (target.flags & 196608) {
var targetTypes = target.types;
var typeVariableCount = 0;
var typeVariable = void 0;
for (var _d = 0, targetTypes_3 = targetTypes; _d < targetTypes_3.length; _d++) {
var t = targetTypes_3[_d];
if (getInferenceInfoForType(t)) {
typeVariable = t;
typeVariableCount++;
}
else {
inferFromTypes(source, t);
}
}
if (typeVariableCount === 1) {
var savePriority = priority;
priority |= 2;
inferFromTypes(source, typeVariable);
priority = savePriority;
}
}
else if (source.flags & 65536) {
var sourceTypes = source.types;
for (var _e = 0, sourceTypes_3 = sourceTypes; _e < sourceTypes_3.length; _e++) {
var sourceType = sourceTypes_3[_e];
inferFromTypes(sourceType, target);
}
}
else {
source = getApparentType(source);
if (source.flags & (32768 | 131072)) {
var key = source.id + "," + target.id;
if (visited && visited.get(key)) {
return;
}
(visited || (visited = ts.createMap())).set(key, true);
var isNonConstructorObject = target.flags & 32768 &&
!(getObjectFlags(target) & 16 && target.symbol && target.symbol.flags & 32);
var symbol = isNonConstructorObject ? target.symbol : undefined;
if (symbol) {
if (ts.contains(symbolStack, symbol)) {
return;
}
(symbolStack || (symbolStack = [])).push(symbol);
inferFromObjectTypes(source, target);
symbolStack.pop();
}
else {
inferFromObjectTypes(source, target);
}
}
}
}
function inferFromContravariantTypes(source, target) {
if (strictFunctionTypes) {
priority ^= 1;
inferFromTypes(source, target);
priority ^= 1;
}
else {
inferFromTypes(source, target);
}
}
function getInferenceInfoForType(type) {
if (type.flags & 540672) {
for (var _i = 0, inferences_1 = inferences; _i < inferences_1.length; _i++) {
var inference = inferences_1[_i];
if (type === inference.typeParameter) {
return inference;
}
}
}
return undefined;
}
function inferFromObjectTypes(source, target) {
if (isGenericMappedType(source) && isGenericMappedType(target)) {
inferFromTypes(getConstraintTypeFromMappedType(source), getConstraintTypeFromMappedType(target));
inferFromTypes(getTemplateTypeFromMappedType(source), getTemplateTypeFromMappedType(target));
}
if (getObjectFlags(target) & 32) {
var constraintType = getConstraintTypeFromMappedType(target);
if (constraintType.flags & 262144) {
var inference = getInferenceInfoForType(constraintType.type);
if (inference && !inference.isFixed) {
var inferredType = inferTypeForHomomorphicMappedType(source, target);
if (inferredType) {
var savePriority = priority;
priority |= 4;
inferFromTypes(inferredType, inference.typeParameter);
priority = savePriority;
}
}
return;
}
if (constraintType.flags & 16384) {
inferFromTypes(getIndexType(source), constraintType);
inferFromTypes(getUnionType(ts.map(getPropertiesOfType(source), getTypeOfSymbol)), getTemplateTypeFromMappedType(target));
return;
}
}
if (!getUnmatchedProperty(source, target, false) || !getUnmatchedProperty(target, source, false)) {
inferFromProperties(source, target);
inferFromSignatures(source, target, 0);
inferFromSignatures(source, target, 1);
inferFromIndexTypes(source, target);
}
}
function inferFromProperties(source, target) {
var properties = getPropertiesOfObjectType(target);
for (var _i = 0, properties_6 = properties; _i < properties_6.length; _i++) {
var targetProp = properties_6[_i];
var sourceProp = getPropertyOfType(source, targetProp.escapedName);
if (sourceProp) {
inferFromTypes(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp));
}
}
}
function inferFromSignatures(source, target, kind) {
var sourceSignatures = getSignaturesOfType(source, kind);
var targetSignatures = getSignaturesOfType(target, kind);
var sourceLen = sourceSignatures.length;
var targetLen = targetSignatures.length;
var len = sourceLen < targetLen ? sourceLen : targetLen;
for (var i = 0; i < len; i++) {
inferFromSignature(getErasedSignature(sourceSignatures[sourceLen - len + i]), getErasedSignature(targetSignatures[targetLen - len + i]));
}
}
function inferFromSignature(source, target) {
forEachMatchingParameterType(source, target, inferFromContravariantTypes);
if (source.typePredicate && target.typePredicate && source.typePredicate.kind === target.typePredicate.kind) {
inferFromTypes(source.typePredicate.type, target.typePredicate.type);
}
else {
inferFromTypes(getReturnTypeOfSignature(source), getReturnTypeOfSignature(target));
}
}
function inferFromIndexTypes(source, target) {
var targetStringIndexType = getIndexTypeOfType(target, 0);
if (targetStringIndexType) {
var sourceIndexType = getIndexTypeOfType(source, 0) ||
getImplicitIndexTypeOfType(source, 0);
if (sourceIndexType) {
inferFromTypes(sourceIndexType, targetStringIndexType);
}
}
var targetNumberIndexType = getIndexTypeOfType(target, 1);
if (targetNumberIndexType) {
var sourceIndexType = getIndexTypeOfType(source, 1) ||
getIndexTypeOfType(source, 0) ||
getImplicitIndexTypeOfType(source, 1);
if (sourceIndexType) {
inferFromTypes(sourceIndexType, targetNumberIndexType);
}
}
}
}
function typeIdenticalToSomeType(type, types) {
for (var _i = 0, types_12 = types; _i < types_12.length; _i++) {
var t = types_12[_i];
if (isTypeIdenticalTo(t, type)) {
return true;
}
}
return false;
}
function removeTypesFromUnionOrIntersection(type, typesToRemove) {
var reducedTypes = [];
for (var _i = 0, _a = type.types; _i < _a.length; _i++) {
var t = _a[_i];
if (!typeIdenticalToSomeType(t, typesToRemove)) {
reducedTypes.push(t);
}
}
return type.flags & 65536 ? getUnionType(reducedTypes) : getIntersectionType(reducedTypes);
}
function hasPrimitiveConstraint(type) {
var constraint = getConstraintOfTypeParameter(type);
return constraint && maybeTypeOfKind(constraint, 8190 | 262144);
}
function getInferredType(context, index) {
var inference = context.inferences[index];
var inferredType = inference.inferredType;
if (!inferredType) {
if (inference.candidates) {
var signature = context.signature;
var widenLiteralTypes = inference.topLevel &&
!hasPrimitiveConstraint(inference.typeParameter) &&
(inference.isFixed || !isTypeParameterAtTopLevel(getReturnTypeOfSignature(signature), inference.typeParameter));
var baseCandidates = widenLiteralTypes ? ts.sameMap(inference.candidates, getWidenedLiteralType) : inference.candidates;
var unwidenedType = inference.priority & 1 ? getCommonSubtype(baseCandidates) :
context.flags & 1 || inference.priority & 8 ? getUnionType(baseCandidates, true) :
getCommonSupertype(baseCandidates);
inferredType = getWidenedType(unwidenedType);
}
else if (context.flags & 2) {
inferredType = silentNeverType;
}
else {
var defaultType = getDefaultFromTypeParameter(inference.typeParameter);
if (defaultType) {
inferredType = instantiateType(defaultType, combineTypeMappers(createBackreferenceMapper(context.signature.typeParameters, index), context));
}
else {
inferredType = getDefaultTypeArgumentType(!!(context.flags & 4));
}
}
inference.inferredType = inferredType;
var constraint = getConstraintOfTypeParameter(context.signature.typeParameters[index]);
if (constraint) {
var instantiatedConstraint = instantiateType(constraint, context);
if (!context.compareTypes(inferredType, getTypeWithThisArgument(instantiatedConstraint, inferredType))) {
inference.inferredType = inferredType = instantiatedConstraint;
}
}
}
return inferredType;
}
function getDefaultTypeArgumentType(isInJavaScriptFile) {
return isInJavaScriptFile ? anyType : emptyObjectType;
}
function getInferredTypes(context) {
var result = [];
for (var i = 0; i < context.inferences.length; i++) {
result.push(getInferredType(context, i));
}
return result;
}
function getResolvedSymbol(node) {
var links = getNodeLinks(node);
if (!links.resolvedSymbol) {
links.resolvedSymbol = !ts.nodeIsMissing(node) &&
resolveName(node, node.escapedText, 107455 | 1048576, ts.Diagnostics.Cannot_find_name_0, node, !ts.isWriteOnlyAccess(node), ts.Diagnostics.Cannot_find_name_0_Did_you_mean_1) || unknownSymbol;
}
return links.resolvedSymbol;
}
function isInTypeQuery(node) {
return !!ts.findAncestor(node, function (n) { return n.kind === 162 ? true : n.kind === 71 || n.kind === 143 ? false : "quit"; });
}
function getFlowCacheKey(node) {
if (node.kind === 71) {
var symbol = getResolvedSymbol(node);
return symbol !== unknownSymbol ? (isApparentTypePosition(node) ? "@" : "") + getSymbolId(symbol) : undefined;
}
if (node.kind === 99) {
return "0";
}
if (node.kind === 179) {
var key = getFlowCacheKey(node.expression);
return key && key + "." + ts.idText(node.name);
}
if (node.kind === 176) {
var container = node.parent.parent;
var key = container.kind === 176 ? getFlowCacheKey(container) : (container.initializer && getFlowCacheKey(container.initializer));
var text = getBindingElementNameText(node);
var result = key && text && (key + "." + text);
return result;
}
return undefined;
}
function getBindingElementNameText(element) {
if (element.parent.kind === 174) {
var name = element.propertyName || element.name;
switch (name.kind) {
case 71:
return ts.idText(name);
case 144:
return ts.isStringOrNumericLiteral(name.expression) ? name.expression.text : undefined;
case 9:
case 8:
return name.text;
default:
ts.Debug.fail("Unexpected name kind for binding element name");
}
}
else {
return "" + element.parent.elements.indexOf(element);
}
}
function isMatchingReference(source, target) {
switch (source.kind) {
case 71:
return target.kind === 71 && getResolvedSymbol(source) === getResolvedSymbol(target) ||
(target.kind === 226 || target.kind === 176) &&
getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(source)) === getSymbolOfNode(target);
case 99:
return target.kind === 99;
case 97:
return target.kind === 97;
case 179:
return target.kind === 179 &&
source.name.escapedText === target.name.escapedText &&
isMatchingReference(source.expression, target.expression);
case 176:
if (target.kind !== 179)
return false;
var t = target;
if (t.name.escapedText !== getBindingElementNameText(source))
return false;
if (source.parent.parent.kind === 176 && isMatchingReference(source.parent.parent, t.expression)) {
return true;
}
if (source.parent.parent.kind === 226) {
var maybeId = source.parent.parent.initializer;
return maybeId && isMatchingReference(maybeId, t.expression);
}
}
return false;
}
function containsMatchingReference(source, target) {
while (source.kind === 179) {
source = source.expression;
if (isMatchingReference(source, target)) {
return true;
}
}
return false;
}
function containsMatchingReferenceDiscriminant(source, target) {
return target.kind === 179 &&
containsMatchingReference(source, target.expression) &&
isDiscriminantProperty(getDeclaredTypeOfReference(target.expression), target.name.escapedText);
}
function getDeclaredTypeOfReference(expr) {
if (expr.kind === 71) {
return getTypeOfSymbol(getResolvedSymbol(expr));
}
if (expr.kind === 179) {
var type = getDeclaredTypeOfReference(expr.expression);
return type && getTypeOfPropertyOfType(type, expr.name.escapedText);
}
return undefined;
}
function isDiscriminantProperty(type, name) {
if (type && type.flags & 65536) {
var prop = getUnionOrIntersectionProperty(type, name);
if (prop && ts.getCheckFlags(prop) & 2) {
if (prop.isDiscriminantProperty === undefined) {
prop.isDiscriminantProperty = prop.checkFlags & 32 && isLiteralType(getTypeOfSymbol(prop));
}
return prop.isDiscriminantProperty;
}
}
return false;
}
function findSingleDiscriminantProperty(sourceProperties, target) {
var result;
for (var _i = 0, sourceProperties_2 = sourceProperties; _i < sourceProperties_2.length; _i++) {
var sourceProperty = sourceProperties_2[_i];
if (isDiscriminantProperty(target, sourceProperty.escapedName)) {
if (result) {
return undefined;
}
result = sourceProperty;
}
}
return result;
}
function isOrContainsMatchingReference(source, target) {
return isMatchingReference(source, target) || containsMatchingReference(source, target);
}
function hasMatchingArgument(callExpression, reference) {
if (callExpression.arguments) {
for (var _i = 0, _a = callExpression.arguments; _i < _a.length; _i++) {
var argument = _a[_i];
if (isOrContainsMatchingReference(reference, argument)) {
return true;
}
}
}
if (callExpression.expression.kind === 179 &&
isOrContainsMatchingReference(reference, callExpression.expression.expression)) {
return true;
}
return false;
}
function getFlowNodeId(flow) {
if (!flow.id) {
flow.id = nextFlowId;
nextFlowId++;
}
return flow.id;
}
function typeMaybeAssignableTo(source, target) {
if (!(source.flags & 65536)) {
return isTypeAssignableTo(source, target);
}
for (var _i = 0, _a = source.types; _i < _a.length; _i++) {
var t = _a[_i];
if (isTypeAssignableTo(t, target)) {
return true;
}
}
return false;
}
function getAssignmentReducedType(declaredType, assignedType) {
if (declaredType !== assignedType) {
if (assignedType.flags & 8192) {
return assignedType;
}
var reducedType = filterType(declaredType, function (t) { return typeMaybeAssignableTo(assignedType, t); });
if (!(reducedType.flags & 8192)) {
return reducedType;
}
}
return declaredType;
}
function getTypeFactsOfTypes(types) {
var result = 0;
for (var _i = 0, types_13 = types; _i < types_13.length; _i++) {
var t = types_13[_i];
result |= getTypeFacts(t);
}
return result;
}
function isFunctionObjectType(type) {
var resolved = resolveStructuredTypeMembers(type);
return !!(resolved.callSignatures.length || resolved.constructSignatures.length ||
resolved.members.get("bind") && isTypeSubtypeOf(type, globalFunctionType));
}
function getTypeFacts(type) {
var flags = type.flags;
if (flags & 2) {
return strictNullChecks ? 4079361 : 4194049;
}
if (flags & 32) {
var isEmpty = type.value === "";
return strictNullChecks ?
isEmpty ? 3030785 : 1982209 :
isEmpty ? 3145473 : 4194049;
}
if (flags & (4 | 16)) {
return strictNullChecks ? 4079234 : 4193922;
}
if (flags & 64) {
var isZero = type.value === 0;
return strictNullChecks ?
isZero ? 3030658 : 1982082 :
isZero ? 3145346 : 4193922;
}
if (flags & 8) {
return strictNullChecks ? 4078980 : 4193668;
}
if (flags & 136) {
return strictNullChecks ?
type === falseType ? 3030404 : 1981828 :
type === falseType ? 3145092 : 4193668;
}
if (flags & 32768) {
return isFunctionObjectType(type) ?
strictNullChecks ? 6164448 : 8376288 :
strictNullChecks ? 6166480 : 8378320;
}
if (flags & (1024 | 2048)) {
return 2457472;
}
if (flags & 4096) {
return 2340752;
}
if (flags & 512) {
return strictNullChecks ? 1981320 : 4193160;
}
if (flags & 16777216) {
return strictNullChecks ? 6166480 : 8378320;
}
if (flags & 540672) {
return getTypeFacts(getBaseConstraintOfType(type) || emptyObjectType);
}
if (flags & 196608) {
return getTypeFactsOfTypes(type.types);
}
return 8388607;
}
function getTypeWithFacts(type, include) {
if (type.flags & 524288) {
var baseConstraint = getBaseConstraintOfType(type) || emptyObjectType;
var result = filterType(baseConstraint, function (t) { return (getTypeFacts(t) & include) !== 0; });
if (result !== baseConstraint) {
return result;
}
return type;
}
return filterType(type, function (t) { return (getTypeFacts(t) & include) !== 0; });
}
function getTypeWithDefault(type, defaultExpression) {
if (defaultExpression) {
var defaultType = getTypeOfExpression(defaultExpression);
return getUnionType([getTypeWithFacts(type, 131072), defaultType]);
}
return type;
}
function getTypeOfDestructuredProperty(type, name) {
var text = ts.getTextOfPropertyName(name);
return getTypeOfPropertyOfType(type, text) ||
isNumericLiteralName(text) && getIndexTypeOfType(type, 1) ||
getIndexTypeOfType(type, 0) ||
unknownType;
}
function getTypeOfDestructuredArrayElement(type, index) {
return isTupleLikeType(type) && getTypeOfPropertyOfType(type, "" + index) ||
checkIteratedTypeOrElementType(type, undefined, false, false) ||
unknownType;
}
function getTypeOfDestructuredSpreadExpression(type) {
return createArrayType(checkIteratedTypeOrElementType(type, undefined, false, false) || unknownType);
}
function getAssignedTypeOfBinaryExpression(node) {
var isDestructuringDefaultAssignment = node.parent.kind === 177 && isDestructuringAssignmentTarget(node.parent) ||
node.parent.kind === 261 && isDestructuringAssignmentTarget(node.parent.parent);
return isDestructuringDefaultAssignment ?
getTypeWithDefault(getAssignedType(node), node.right) :
getTypeOfExpression(node.right);
}
function isDestructuringAssignmentTarget(parent) {
return parent.parent.kind === 194 && parent.parent.left === parent ||
parent.parent.kind === 216 && parent.parent.initializer === parent;
}
function getAssignedTypeOfArrayLiteralElement(node, element) {
return getTypeOfDestructuredArrayElement(getAssignedType(node), ts.indexOf(node.elements, element));
}
function getAssignedTypeOfSpreadExpression(node) {
return getTypeOfDestructuredSpreadExpression(getAssignedType(node.parent));
}
function getAssignedTypeOfPropertyAssignment(node) {
return getTypeOfDestructuredProperty(getAssignedType(node.parent), node.name);
}
function getAssignedTypeOfShorthandPropertyAssignment(node) {
return getTypeWithDefault(getAssignedTypeOfPropertyAssignment(node), node.objectAssignmentInitializer);
}
function getAssignedType(node) {
var parent = node.parent;
switch (parent.kind) {
case 215:
return stringType;
case 216:
return checkRightHandSideOfForOf(parent.expression, parent.awaitModifier) || unknownType;
case 194:
return getAssignedTypeOfBinaryExpression(parent);
case 188:
return undefinedType;
case 177:
return getAssignedTypeOfArrayLiteralElement(parent, node);
case 198:
return getAssignedTypeOfSpreadExpression(parent);
case 261:
return getAssignedTypeOfPropertyAssignment(parent);
case 262:
return getAssignedTypeOfShorthandPropertyAssignment(parent);
}
return unknownType;
}
function getInitialTypeOfBindingElement(node) {
var pattern = node.parent;
var parentType = getInitialType(pattern.parent);
var type = pattern.kind === 174 ?
getTypeOfDestructuredProperty(parentType, node.propertyName || node.name) :
!node.dotDotDotToken ?
getTypeOfDestructuredArrayElement(parentType, ts.indexOf(pattern.elements, node)) :
getTypeOfDestructuredSpreadExpression(parentType);
return getTypeWithDefault(type, node.initializer);
}
function getTypeOfInitializer(node) {
var links = getNodeLinks(node);
return links.resolvedType || getTypeOfExpression(node);
}
function getInitialTypeOfVariableDeclaration(node) {
if (node.initializer) {
return getTypeOfInitializer(node.initializer);
}
if (node.parent.parent.kind === 215) {
return stringType;
}
if (node.parent.parent.kind === 216) {
return checkRightHandSideOfForOf(node.parent.parent.expression, node.parent.parent.awaitModifier) || unknownType;
}
return unknownType;
}
function getInitialType(node) {
return node.kind === 226 ?
getInitialTypeOfVariableDeclaration(node) :
getInitialTypeOfBindingElement(node);
}
function getInitialOrAssignedType(node) {
return node.kind === 226 || node.kind === 176 ?
getInitialType(node) :
getAssignedType(node);
}
function isEmptyArrayAssignment(node) {
return node.kind === 226 && node.initializer &&
isEmptyArrayLiteral(node.initializer) ||
node.kind !== 176 && node.parent.kind === 194 &&
isEmptyArrayLiteral(node.parent.right);
}
function getReferenceCandidate(node) {
switch (node.kind) {
case 185:
return getReferenceCandidate(node.expression);
case 194:
switch (node.operatorToken.kind) {
case 58:
return getReferenceCandidate(node.left);
case 26:
return getReferenceCandidate(node.right);
}
}
return node;
}
function getReferenceRoot(node) {
var parent = node.parent;
return parent.kind === 185 ||
parent.kind === 194 && parent.operatorToken.kind === 58 && parent.left === node ||
parent.kind === 194 && parent.operatorToken.kind === 26 && parent.right === node ?
getReferenceRoot(parent) : node;
}
function getTypeOfSwitchClause(clause) {
if (clause.kind === 257) {
var caseType = getRegularTypeOfLiteralType(getTypeOfExpression(clause.expression));
return isUnitType(caseType) ? caseType : undefined;
}
return neverType;
}
function getSwitchClauseTypes(switchStatement) {
var links = getNodeLinks(switchStatement);
if (!links.switchTypes) {
links.switchTypes = [];
for (var _i = 0, _a = switchStatement.caseBlock.clauses; _i < _a.length; _i++) {
var clause = _a[_i];
var type = getTypeOfSwitchClause(clause);
if (type === undefined) {
return links.switchTypes = ts.emptyArray;
}
links.switchTypes.push(type);
}
}
return links.switchTypes;
}
function eachTypeContainedIn(source, types) {
return source.flags & 65536 ? !ts.forEach(source.types, function (t) { return !ts.contains(types, t); }) : ts.contains(types, source);
}
function isTypeSubsetOf(source, target) {
return source === target || target.flags & 65536 && isTypeSubsetOfUnion(source, target);
}
function isTypeSubsetOfUnion(source, target) {
if (source.flags & 65536) {
for (var _i = 0, _a = source.types; _i < _a.length; _i++) {
var t = _a[_i];
if (!containsType(target.types, t)) {
return false;
}
}
return true;
}
if (source.flags & 256 && getBaseTypeOfEnumLiteralType(source) === target) {
return true;
}
return containsType(target.types, source);
}
function forEachType(type, f) {
return type.flags & 65536 ? ts.forEach(type.types, f) : f(type);
}
function filterType(type, f) {
if (type.flags & 65536) {
var types = type.types;
var filtered = ts.filter(types, f);
return filtered === types ? type : getUnionTypeFromSortedList(filtered);
}
return f(type) ? type : neverType;
}
function mapType(type, mapper) {
if (!(type.flags & 65536)) {
return mapper(type);
}
var types = type.types;
var mappedType;
var mappedTypes;
for (var _i = 0, types_14 = types; _i < types_14.length; _i++) {
var current = types_14[_i];
var t = mapper(current);
if (t) {
if (!mappedType) {
mappedType = t;
}
else if (!mappedTypes) {
mappedTypes = [mappedType, t];
}
else {
mappedTypes.push(t);
}
}
}
return mappedTypes ? getUnionType(mappedTypes) : mappedType;
}
function extractTypesOfKind(type, kind) {
return filterType(type, function (t) { return (t.flags & kind) !== 0; });
}
function replacePrimitivesWithLiterals(typeWithPrimitives, typeWithLiterals) {
if (isTypeSubsetOf(stringType, typeWithPrimitives) && maybeTypeOfKind(typeWithLiterals, 32) ||
isTypeSubsetOf(numberType, typeWithPrimitives) && maybeTypeOfKind(typeWithLiterals, 64)) {
return mapType(typeWithPrimitives, function (t) {
return t.flags & 2 ? extractTypesOfKind(typeWithLiterals, 2 | 32) :
t.flags & 4 ? extractTypesOfKind(typeWithLiterals, 4 | 64) :
t;
});
}
return typeWithPrimitives;
}
function isIncomplete(flowType) {
return flowType.flags === 0;
}
function getTypeFromFlowType(flowType) {
return flowType.flags === 0 ? flowType.type : flowType;
}
function createFlowType(type, incomplete) {
return incomplete ? { flags: 0, type: type } : type;
}
function createEvolvingArrayType(elementType) {
var result = createObjectType(256);
result.elementType = elementType;
return result;
}
function getEvolvingArrayType(elementType) {
return evolvingArrayTypes[elementType.id] || (evolvingArrayTypes[elementType.id] = createEvolvingArrayType(elementType));
}
function addEvolvingArrayElementType(evolvingArrayType, node) {
var elementType = getBaseTypeOfLiteralType(getContextFreeTypeOfExpression(node));
return isTypeSubsetOf(elementType, evolvingArrayType.elementType) ? evolvingArrayType : getEvolvingArrayType(getUnionType([evolvingArrayType.elementType, elementType]));
}
function createFinalArrayType(elementType) {
return elementType.flags & 8192 ?
autoArrayType :
createArrayType(elementType.flags & 65536 ?
getUnionType(elementType.types, true) :
elementType);
}
function getFinalArrayType(evolvingArrayType) {
return evolvingArrayType.finalArrayType || (evolvingArrayType.finalArrayType = createFinalArrayType(evolvingArrayType.elementType));
}
function finalizeEvolvingArrayType(type) {
return getObjectFlags(type) & 256 ? getFinalArrayType(type) : type;
}
function getElementTypeOfEvolvingArrayType(type) {
return getObjectFlags(type) & 256 ? type.elementType : neverType;
}
function isEvolvingArrayTypeList(types) {
var hasEvolvingArrayType = false;
for (var _i = 0, types_15 = types; _i < types_15.length; _i++) {
var t = types_15[_i];
if (!(t.flags & 8192)) {
if (!(getObjectFlags(t) & 256)) {
return false;
}
hasEvolvingArrayType = true;
}
}
return hasEvolvingArrayType;
}
function getUnionOrEvolvingArrayType(types, subtypeReduction) {
return isEvolvingArrayTypeList(types) ?
getEvolvingArrayType(getUnionType(ts.map(types, getElementTypeOfEvolvingArrayType))) :
getUnionType(ts.sameMap(types, finalizeEvolvingArrayType), subtypeReduction);
}
function isEvolvingArrayOperationTarget(node) {
var root = getReferenceRoot(node);
var parent = root.parent;
var isLengthPushOrUnshift = parent.kind === 179 && (parent.name.escapedText === "length" ||
parent.parent.kind === 181 && ts.isPushOrUnshiftIdentifier(parent.name));
var isElementAssignment = parent.kind === 180 &&
parent.expression === root &&
parent.parent.kind === 194 &&
parent.parent.operatorToken.kind === 58 &&
parent.parent.left === parent &&
!ts.isAssignmentTarget(parent.parent) &&
isTypeAssignableToKind(getTypeOfExpression(parent.argumentExpression), 84);
return isLengthPushOrUnshift || isElementAssignment;
}
function maybeTypePredicateCall(node) {
var links = getNodeLinks(node);
if (links.maybeTypePredicate === undefined) {
links.maybeTypePredicate = getMaybeTypePredicate(node);
}
return links.maybeTypePredicate;
}
function getMaybeTypePredicate(node) {
if (node.expression.kind !== 97) {
var funcType = checkNonNullExpression(node.expression);
if (funcType !== silentNeverType) {
var apparentType = getApparentType(funcType);
if (apparentType !== unknownType) {
var callSignatures = getSignaturesOfType(apparentType, 0);
return !!ts.forEach(callSignatures, function (sig) { return sig.typePredicate; });
}
}
}
return false;
}
function reportFlowControlError(node) {
var block = ts.findAncestor(node, ts.isFunctionOrModuleBlock);
var sourceFile = ts.getSourceFileOfNode(node);
var span = ts.getSpanOfTokenAtPosition(sourceFile, block.statements.pos);
diagnostics.add(ts.createFileDiagnostic(sourceFile, span.start, span.length, ts.Diagnostics.The_containing_function_or_module_body_is_too_large_for_control_flow_analysis));
}
function getFlowTypeOfReference(reference, declaredType, initialType, flowContainer, couldBeUninitialized) {
if (initialType === void 0) { initialType = declaredType; }
var key;
var flowDepth = 0;
if (flowAnalysisDisabled) {
return unknownType;
}
if (!reference.flowNode || !couldBeUninitialized && !(declaredType.flags & 17810175)) {
return declaredType;
}
var sharedFlowStart = sharedFlowCount;
var evolvedType = getTypeFromFlowType(getTypeAtFlowNode(reference.flowNode));
sharedFlowCount = sharedFlowStart;
var resultType = getObjectFlags(evolvedType) & 256 && isEvolvingArrayOperationTarget(reference) ? anyArrayType : finalizeEvolvingArrayType(evolvedType);
if (reference.parent.kind === 203 && getTypeWithFacts(resultType, 524288).flags & 8192) {
return declaredType;
}
return resultType;
function getTypeAtFlowNode(flow) {
if (flowDepth === 2500) {
flowAnalysisDisabled = true;
reportFlowControlError(reference);
return unknownType;
}
flowDepth++;
while (true) {
var flags = flow.flags;
if (flags & 1024) {
for (var i = sharedFlowStart; i < sharedFlowCount; i++) {
if (sharedFlowNodes[i] === flow) {
flowDepth--;
return sharedFlowTypes[i];
}
}
}
var type = void 0;
if (flags & 4096) {
flow.locked = true;
type = getTypeAtFlowNode(flow.antecedent);
flow.locked = false;
}
else if (flags & 2048) {
flow = flow.antecedent;
continue;
}
else if (flags & 16) {
type = getTypeAtFlowAssignment(flow);
if (!type) {
flow = flow.antecedent;
continue;
}
}
else if (flags & 96) {
type = getTypeAtFlowCondition(flow);
}
else if (flags & 128) {
type = getTypeAtSwitchClause(flow);
}
else if (flags & 12) {
if (flow.antecedents.length === 1) {
flow = flow.antecedents[0];
continue;
}
type = flags & 4 ?
getTypeAtFlowBranchLabel(flow) :
getTypeAtFlowLoopLabel(flow);
}
else if (flags & 256) {
type = getTypeAtFlowArrayMutation(flow);
if (!type) {
flow = flow.antecedent;
continue;
}
}
else if (flags & 2) {
var container = flow.container;
if (container && container !== flowContainer && reference.kind !== 179 && reference.kind !== 99) {
flow = container.flowNode;
continue;
}
type = initialType;
}
else {
type = convertAutoToAny(declaredType);
}
if (flags & 1024) {
sharedFlowNodes[sharedFlowCount] = flow;
sharedFlowTypes[sharedFlowCount] = type;
sharedFlowCount++;
}
flowDepth--;
return type;
}
}
function getTypeAtFlowAssignment(flow) {
var node = flow.node;
if (isMatchingReference(reference, node)) {
if (ts.getAssignmentTargetKind(node) === 2) {
var flowType = getTypeAtFlowNode(flow.antecedent);
return createFlowType(getBaseTypeOfLiteralType(getTypeFromFlowType(flowType)), isIncomplete(flowType));
}
if (declaredType === autoType || declaredType === autoArrayType) {
if (isEmptyArrayAssignment(node)) {
return getEvolvingArrayType(neverType);
}
var assignedType = getBaseTypeOfLiteralType(getInitialOrAssignedType(node));
return isTypeAssignableTo(assignedType, declaredType) ? assignedType : anyArrayType;
}
if (declaredType.flags & 65536) {
return getAssignmentReducedType(declaredType, getInitialOrAssignedType(node));
}
return declaredType;
}
if (containsMatchingReference(reference, node)) {
return declaredType;
}
return undefined;
}
function getTypeAtFlowArrayMutation(flow) {
if (declaredType === autoType || declaredType === autoArrayType) {
var node = flow.node;
var expr = node.kind === 181 ?
node.expression.expression :
node.left.expression;
if (isMatchingReference(reference, getReferenceCandidate(expr))) {
var flowType = getTypeAtFlowNode(flow.antecedent);
var type = getTypeFromFlowType(flowType);
if (getObjectFlags(type) & 256) {
var evolvedType_1 = type;
if (node.kind === 181) {
for (var _i = 0, _a = node.arguments; _i < _a.length; _i++) {
var arg = _a[_i];
evolvedType_1 = addEvolvingArrayElementType(evolvedType_1, arg);
}
}
else {
var indexType = getTypeOfExpression(node.left.argumentExpression);
if (isTypeAssignableToKind(indexType, 84)) {
evolvedType_1 = addEvolvingArrayElementType(evolvedType_1, node.right);
}
}
return evolvedType_1 === type ? flowType : createFlowType(evolvedType_1, isIncomplete(flowType));
}
return flowType;
}
}
return undefined;
}
function getTypeAtFlowCondition(flow) {
var flowType = getTypeAtFlowNode(flow.antecedent);
var type = getTypeFromFlowType(flowType);
if (type.flags & 8192) {
return flowType;
}
var assumeTrue = (flow.flags & 32) !== 0;
var nonEvolvingType = finalizeEvolvingArrayType(type);
var narrowedType = narrowType(nonEvolvingType, flow.expression, assumeTrue);
if (narrowedType === nonEvolvingType) {
return flowType;
}
var incomplete = isIncomplete(flowType);
var resultType = incomplete && narrowedType.flags & 8192 ? silentNeverType : narrowedType;
return createFlowType(resultType, incomplete);
}
function getTypeAtSwitchClause(flow) {
var flowType = getTypeAtFlowNode(flow.antecedent);
var type = getTypeFromFlowType(flowType);
var expr = flow.switchStatement.expression;
if (isMatchingReference(reference, expr)) {
type = narrowTypeBySwitchOnDiscriminant(type, flow.switchStatement, flow.clauseStart, flow.clauseEnd);
}
else if (isMatchingReferenceDiscriminant(expr, type)) {
type = narrowTypeByDiscriminant(type, expr, function (t) { return narrowTypeBySwitchOnDiscriminant(t, flow.switchStatement, flow.clauseStart, flow.clauseEnd); });
}
return createFlowType(type, isIncomplete(flowType));
}
function getTypeAtFlowBranchLabel(flow) {
var antecedentTypes = [];
var subtypeReduction = false;
var seenIncomplete = false;
for (var _i = 0, _a = flow.antecedents; _i < _a.length; _i++) {
var antecedent = _a[_i];
if (antecedent.flags & 2048 && antecedent.lock.locked) {
continue;
}
var flowType = getTypeAtFlowNode(antecedent);
var type = getTypeFromFlowType(flowType);
if (type === declaredType && declaredType === initialType) {
return type;
}
ts.pushIfUnique(antecedentTypes, type);
if (!isTypeSubsetOf(type, declaredType)) {
subtypeReduction = true;
}
if (isIncomplete(flowType)) {
seenIncomplete = true;
}
}
return createFlowType(getUnionOrEvolvingArrayType(antecedentTypes, subtypeReduction), seenIncomplete);
}
function getTypeAtFlowLoopLabel(flow) {
var id = getFlowNodeId(flow);
var cache = flowLoopCaches[id] || (flowLoopCaches[id] = ts.createMap());
if (!key) {
key = getFlowCacheKey(reference);
if (!key) {
return declaredType;
}
}
var cached = cache.get(key);
if (cached) {
return cached;
}
for (var i = flowLoopStart; i < flowLoopCount; i++) {
if (flowLoopNodes[i] === flow && flowLoopKeys[i] === key && flowLoopTypes[i].length) {
return createFlowType(getUnionOrEvolvingArrayType(flowLoopTypes[i], false), true);
}
}
var antecedentTypes = [];
var subtypeReduction = false;
var firstAntecedentType;
flowLoopNodes[flowLoopCount] = flow;
flowLoopKeys[flowLoopCount] = key;
flowLoopTypes[flowLoopCount] = antecedentTypes;
for (var _i = 0, _a = flow.antecedents; _i < _a.length; _i++) {
var antecedent = _a[_i];
flowLoopCount++;
var flowType = getTypeAtFlowNode(antecedent);
flowLoopCount--;
if (!firstAntecedentType) {
firstAntecedentType = flowType;
}
var type = getTypeFromFlowType(flowType);
var cached_1 = cache.get(key);
if (cached_1) {
return cached_1;
}
ts.pushIfUnique(antecedentTypes, type);
if (!isTypeSubsetOf(type, declaredType)) {
subtypeReduction = true;
}
if (type === declaredType) {
break;
}
}
var result = getUnionOrEvolvingArrayType(antecedentTypes, subtypeReduction);
if (isIncomplete(firstAntecedentType)) {
return createFlowType(result, true);
}
cache.set(key, result);
return result;
}
function isMatchingReferenceDiscriminant(expr, computedType) {
return expr.kind === 179 &&
computedType.flags & 65536 &&
isMatchingReference(reference, expr.expression) &&
isDiscriminantProperty(computedType, expr.name.escapedText);
}
function narrowTypeByDiscriminant(type, propAccess, narrowType) {
var propName = propAccess.name.escapedText;
var propType = getTypeOfPropertyOfType(type, propName);
var narrowedPropType = propType && narrowType(propType);
return propType === narrowedPropType ? type : filterType(type, function (t) { return isTypeComparableTo(getTypeOfPropertyOfType(t, propName), narrowedPropType); });
}
function narrowTypeByTruthiness(type, expr, assumeTrue) {
if (isMatchingReference(reference, expr)) {
return getTypeWithFacts(type, assumeTrue ? 1048576 : 2097152);
}
if (isMatchingReferenceDiscriminant(expr, declaredType)) {
return narrowTypeByDiscriminant(type, expr, function (t) { return getTypeWithFacts(t, assumeTrue ? 1048576 : 2097152); });
}
if (containsMatchingReferenceDiscriminant(reference, expr)) {
return declaredType;
}
return type;
}
function narrowTypeByBinaryExpression(type, expr, assumeTrue) {
switch (expr.operatorToken.kind) {
case 58:
return narrowTypeByTruthiness(type, expr.left, assumeTrue);
case 32:
case 33:
case 34:
case 35:
var operator_1 = expr.operatorToken.kind;
var left_1 = getReferenceCandidate(expr.left);
var right_1 = getReferenceCandidate(expr.right);
if (left_1.kind === 189 && right_1.kind === 9) {
return narrowTypeByTypeof(type, left_1, operator_1, right_1, assumeTrue);
}
if (right_1.kind === 189 && left_1.kind === 9) {
return narrowTypeByTypeof(type, right_1, operator_1, left_1, assumeTrue);
}
if (isMatchingReference(reference, left_1)) {
return narrowTypeByEquality(type, operator_1, right_1, assumeTrue);
}
if (isMatchingReference(reference, right_1)) {
return narrowTypeByEquality(type, operator_1, left_1, assumeTrue);
}
if (isMatchingReferenceDiscriminant(left_1, declaredType)) {
return narrowTypeByDiscriminant(type, left_1, function (t) { return narrowTypeByEquality(t, operator_1, right_1, assumeTrue); });
}
if (isMatchingReferenceDiscriminant(right_1, declaredType)) {
return narrowTypeByDiscriminant(type, right_1, function (t) { return narrowTypeByEquality(t, operator_1, left_1, assumeTrue); });
}
if (containsMatchingReferenceDiscriminant(reference, left_1) || containsMatchingReferenceDiscriminant(reference, right_1)) {
return declaredType;
}
break;
case 93:
return narrowTypeByInstanceof(type, expr, assumeTrue);
case 26:
return narrowType(type, expr.right, assumeTrue);
}
return type;
}
function narrowTypeByEquality(type, operator, value, assumeTrue) {
if (type.flags & 1) {
return type;
}
if (operator === 33 || operator === 35) {
assumeTrue = !assumeTrue;
}
var valueType = getTypeOfExpression(value);
if (valueType.flags & 6144) {
if (!strictNullChecks) {
return type;
}
var doubleEquals = operator === 32 || operator === 33;
var facts = doubleEquals ?
assumeTrue ? 65536 : 524288 :
value.kind === 95 ?
assumeTrue ? 32768 : 262144 :
assumeTrue ? 16384 : 131072;
return getTypeWithFacts(type, facts);
}
if (type.flags & 16810497) {
return type;
}
if (assumeTrue) {
var narrowedType = filterType(type, function (t) { return areTypesComparable(t, valueType); });
return narrowedType.flags & 8192 ? type : replacePrimitivesWithLiterals(narrowedType, valueType);
}
if (isUnitType(valueType)) {
var regularType_1 = getRegularTypeOfLiteralType(valueType);
return filterType(type, function (t) { return getRegularTypeOfLiteralType(t) !== regularType_1; });
}
return type;
}
function narrowTypeByTypeof(type, typeOfExpr, operator, literal, assumeTrue) {
var target = getReferenceCandidate(typeOfExpr.expression);
if (!isMatchingReference(reference, target)) {
if (containsMatchingReference(reference, target)) {
return declaredType;
}
return type;
}
if (operator === 33 || operator === 35) {
assumeTrue = !assumeTrue;
}
if (assumeTrue && !(type.flags & 65536)) {
var targetType = typeofTypesByName.get(literal.text);
if (targetType) {
if (isTypeSubtypeOf(targetType, type)) {
return targetType;
}
if (type.flags & 540672) {
var constraint = getBaseConstraintOfType(type) || anyType;
if (isTypeSubtypeOf(targetType, constraint)) {
return getIntersectionType([type, targetType]);
}
}
}
}
var facts = assumeTrue ?
typeofEQFacts.get(literal.text) || 64 :
typeofNEFacts.get(literal.text) || 8192;
return getTypeWithFacts(type, facts);
}
function narrowTypeBySwitchOnDiscriminant(type, switchStatement, clauseStart, clauseEnd) {
var switchTypes = getSwitchClauseTypes(switchStatement);
if (!switchTypes.length) {
return type;
}
var clauseTypes = switchTypes.slice(clauseStart, clauseEnd);
var hasDefaultClause = clauseStart === clauseEnd || ts.contains(clauseTypes, neverType);
var discriminantType = getUnionType(clauseTypes);
var caseType = discriminantType.flags & 8192 ? neverType :
replacePrimitivesWithLiterals(filterType(type, function (t) { return isTypeComparableTo(discriminantType, t); }), discriminantType);
if (!hasDefaultClause) {
return caseType;
}
var defaultType = filterType(type, function (t) { return !(isUnitType(t) && ts.contains(switchTypes, getRegularTypeOfLiteralType(t))); });
return caseType.flags & 8192 ? defaultType : getUnionType([caseType, defaultType]);
}
function narrowTypeByInstanceof(type, expr, assumeTrue) {
var left = getReferenceCandidate(expr.left);
if (!isMatchingReference(reference, left)) {
if (containsMatchingReference(reference, left)) {
return declaredType;
}
return type;
}
var rightType = getTypeOfExpression(expr.right);
if (!isTypeSubtypeOf(rightType, globalFunctionType)) {
return type;
}
var targetType;
var prototypeProperty = getPropertyOfType(rightType, "prototype");
if (prototypeProperty) {
var prototypePropertyType = getTypeOfSymbol(prototypeProperty);
if (!isTypeAny(prototypePropertyType)) {
targetType = prototypePropertyType;
}
}
if (isTypeAny(type) && (targetType === globalObjectType || targetType === globalFunctionType)) {
return type;
}
if (!targetType) {
var constructSignatures = void 0;
if (getObjectFlags(rightType) & 2) {
constructSignatures = resolveDeclaredMembers(rightType).declaredConstructSignatures;
}
else if (getObjectFlags(rightType) & 16) {
constructSignatures = getSignaturesOfType(rightType, 1);
}
if (constructSignatures && constructSignatures.length) {
targetType = getUnionType(ts.map(constructSignatures, function (signature) { return getReturnTypeOfSignature(getErasedSignature(signature)); }));
}
}
if (targetType) {
return getNarrowedType(type, targetType, assumeTrue, isTypeInstanceOf);
}
return type;
}
function getNarrowedType(type, candidate, assumeTrue, isRelated) {
if (!assumeTrue) {
return filterType(type, function (t) { return !isRelated(t, candidate); });
}
if (type.flags & 65536) {
var assignableType = filterType(type, function (t) { return isRelated(t, candidate); });
if (!(assignableType.flags & 8192)) {
return assignableType;
}
}
return isTypeSubtypeOf(candidate, type) ? candidate :
isTypeAssignableTo(type, candidate) ? type :
isTypeAssignableTo(candidate, type) ? candidate :
getIntersectionType([type, candidate]);
}
function narrowTypeByTypePredicate(type, callExpression, assumeTrue) {
if (!hasMatchingArgument(callExpression, reference) || !maybeTypePredicateCall(callExpression)) {
return type;
}
var signature = getResolvedSignature(callExpression);
var predicate = signature.typePredicate;
if (!predicate) {
return type;
}
if (isTypeAny(type) && (predicate.type === globalObjectType || predicate.type === globalFunctionType)) {
return type;
}
if (ts.isIdentifierTypePredicate(predicate)) {
var predicateArgument = callExpression.arguments[predicate.parameterIndex - (signature.thisParameter ? 1 : 0)];
if (predicateArgument) {
if (isMatchingReference(reference, predicateArgument)) {
return getNarrowedType(type, predicate.type, assumeTrue, isTypeSubtypeOf);
}
if (containsMatchingReference(reference, predicateArgument)) {
return declaredType;
}
}
}
else {
var invokedExpression = ts.skipParentheses(callExpression.expression);
if (invokedExpression.kind === 180 || invokedExpression.kind === 179) {
var accessExpression = invokedExpression;
var possibleReference = ts.skipParentheses(accessExpression.expression);
if (isMatchingReference(reference, possibleReference)) {
return getNarrowedType(type, predicate.type, assumeTrue, isTypeSubtypeOf);
}
if (containsMatchingReference(reference, possibleReference)) {
return declaredType;
}
}
}
return type;
}
function narrowType(type, expr, assumeTrue) {
switch (expr.kind) {
case 71:
case 99:
case 97:
case 179:
return narrowTypeByTruthiness(type, expr, assumeTrue);
case 181:
return narrowTypeByTypePredicate(type, expr, assumeTrue);
case 185:
return narrowType(type, expr.expression, assumeTrue);
case 194:
return narrowTypeByBinaryExpression(type, expr, assumeTrue);
case 192:
if (expr.operator === 51) {
return narrowType(type, expr.operand, !assumeTrue);
}
break;
}
return type;
}
}
function getTypeOfSymbolAtLocation(symbol, location) {
symbol = symbol.exportSymbol || symbol;
if (location.kind === 71) {
if (ts.isRightSideOfQualifiedNameOrPropertyAccess(location)) {
location = location.parent;
}
if (ts.isPartOfExpression(location) && !ts.isAssignmentTarget(location)) {
var type = getTypeOfExpression(location);
if (getExportSymbolOfValueSymbolIfExported(getNodeLinks(location).resolvedSymbol) === symbol) {
return type;
}
}
}
return getTypeOfSymbol(symbol);
}
function getControlFlowContainer(node) {
return ts.findAncestor(node.parent, function (node) {
return ts.isFunctionLike(node) && !ts.getImmediatelyInvokedFunctionExpression(node) ||
node.kind === 234 ||
node.kind === 265 ||
node.kind === 149;
});
}
function isParameterAssigned(symbol) {
var func = ts.getRootDeclaration(symbol.valueDeclaration).parent;
var links = getNodeLinks(func);
if (!(links.flags & 4194304)) {
links.flags |= 4194304;
if (!hasParentWithAssignmentsMarked(func)) {
markParameterAssignments(func);
}
}
return symbol.isAssigned || false;
}
function hasParentWithAssignmentsMarked(node) {
return !!ts.findAncestor(node.parent, function (node) { return ts.isFunctionLike(node) && !!(getNodeLinks(node).flags & 4194304); });
}
function markParameterAssignments(node) {
if (node.kind === 71) {
if (ts.isAssignmentTarget(node)) {
var symbol = getResolvedSymbol(node);
if (symbol.valueDeclaration && ts.getRootDeclaration(symbol.valueDeclaration).kind === 146) {
symbol.isAssigned = true;
}
}
}
else {
ts.forEachChild(node, markParameterAssignments);
}
}
function isConstVariable(symbol) {
return symbol.flags & 3 && (getDeclarationNodeFlagsFromSymbol(symbol) & 2) !== 0 && getTypeOfSymbol(symbol) !== autoArrayType;
}
function removeOptionalityFromDeclaredType(declaredType, declaration) {
var annotationIncludesUndefined = strictNullChecks &&
declaration.kind === 146 &&
declaration.initializer &&
getFalsyFlags(declaredType) & 2048 &&
!(getFalsyFlags(checkExpression(declaration.initializer)) & 2048);
return annotationIncludesUndefined ? getTypeWithFacts(declaredType, 131072) : declaredType;
}
function isApparentTypePosition(node) {
var parent = node.parent;
return parent.kind === 179 ||
parent.kind === 181 && parent.expression === node ||
parent.kind === 180 && parent.expression === node;
}
function typeHasNullableConstraint(type) {
return type.flags & 540672 && maybeTypeOfKind(getBaseConstraintOfType(type) || emptyObjectType, 6144);
}
function getDeclaredOrApparentType(symbol, node) {
var type = getTypeOfSymbol(symbol);
if (isApparentTypePosition(node) && forEachType(type, typeHasNullableConstraint)) {
return mapType(getWidenedType(type), getApparentType);
}
return type;
}
function checkIdentifier(node) {
var symbol = getResolvedSymbol(node);
if (symbol === unknownSymbol) {
return unknownType;
}
if (symbol === argumentsSymbol) {
var container = ts.getContainingFunction(node);
if (languageVersion < 2) {
if (container.kind === 187) {
error(node, ts.Diagnostics.The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_standard_function_expression);
}
else if (ts.hasModifier(container, 256)) {
error(node, ts.Diagnostics.The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_using_a_standard_function_or_method);
}
}
getNodeLinks(container).flags |= 8192;
return getTypeOfSymbol(symbol);
}
if (isNonLocalAlias(symbol, 107455) && !isInTypeQuery(node) && !isConstEnumOrConstEnumOnlyModule(resolveAlias(symbol))) {
markAliasSymbolAsReferenced(symbol);
}
var localOrExportSymbol = getExportSymbolOfValueSymbolIfExported(symbol);
var declaration = localOrExportSymbol.valueDeclaration;
if (localOrExportSymbol.flags & 32) {
if (declaration.kind === 229
&& ts.nodeIsDecorated(declaration)) {
var container = ts.getContainingClass(node);
while (container !== undefined) {
if (container === declaration && container.name !== node) {
getNodeLinks(declaration).flags |= 8388608;
getNodeLinks(node).flags |= 16777216;
break;
}
container = ts.getContainingClass(container);
}
}
else if (declaration.kind === 199) {
var container = ts.getThisContainer(node, false);
while (container !== undefined) {
if (container.parent === declaration) {
if (container.kind === 149 && ts.hasModifier(container, 32)) {
getNodeLinks(declaration).flags |= 8388608;
getNodeLinks(node).flags |= 16777216;
}
break;
}
container = ts.getThisContainer(container, false);
}
}
}
checkCollisionWithCapturedSuperVariable(node, node);
checkCollisionWithCapturedThisVariable(node, node);
checkCollisionWithCapturedNewTargetVariable(node, node);
checkNestedBlockScopedBinding(node, symbol);
var type = getDeclaredOrApparentType(localOrExportSymbol, node);
var assignmentKind = ts.getAssignmentTargetKind(node);
if (assignmentKind) {
if (!(localOrExportSymbol.flags & 3)) {
error(node, ts.Diagnostics.Cannot_assign_to_0_because_it_is_not_a_variable, symbolToString(symbol));
return unknownType;
}
if (isReadonlySymbol(localOrExportSymbol)) {
error(node, ts.Diagnostics.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property, symbolToString(symbol));
return unknownType;
}
}
var isAlias = localOrExportSymbol.flags & 2097152;
if (localOrExportSymbol.flags & 3) {
if (assignmentKind === 1) {
return type;
}
}
else if (isAlias) {
declaration = ts.find(symbol.declarations, isSomeImportDeclaration);
}
else {
return type;
}
if (!declaration) {
return type;
}
var isParameter = ts.getRootDeclaration(declaration).kind === 146;
var declarationContainer = getControlFlowContainer(declaration);
var flowContainer = getControlFlowContainer(node);
var isOuterVariable = flowContainer !== declarationContainer;
while (flowContainer !== declarationContainer && (flowContainer.kind === 186 ||
flowContainer.kind === 187 || ts.isObjectLiteralOrClassExpressionMethod(flowContainer)) &&
(isConstVariable(localOrExportSymbol) || isParameter && !isParameterAssigned(localOrExportSymbol))) {
flowContainer = getControlFlowContainer(flowContainer);
}
var assumeInitialized = isParameter || isAlias || isOuterVariable ||
type !== autoType && type !== autoArrayType && (!strictNullChecks || (type.flags & 1) !== 0 || isInTypeQuery(node) || node.parent.kind === 246) ||
node.parent.kind === 203 ||
ts.isInAmbientContext(declaration);
var initialType = assumeInitialized ? (isParameter ? removeOptionalityFromDeclaredType(type, ts.getRootDeclaration(declaration)) : type) :
type === autoType || type === autoArrayType ? undefinedType :
getNullableType(type, 2048);
var flowType = getFlowTypeOfReference(node, type, initialType, flowContainer, !assumeInitialized);
if (type === autoType || type === autoArrayType) {
if (flowType === autoType || flowType === autoArrayType) {
if (noImplicitAny) {
error(ts.getNameOfDeclaration(declaration), ts.Diagnostics.Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined, symbolToString(symbol), typeToString(flowType));
error(node, ts.Diagnostics.Variable_0_implicitly_has_an_1_type, symbolToString(symbol), typeToString(flowType));
}
return convertAutoToAny(flowType);
}
}
else if (!assumeInitialized && !(getFalsyFlags(type) & 2048) && getFalsyFlags(flowType) & 2048) {
error(node, ts.Diagnostics.Variable_0_is_used_before_being_assigned, symbolToString(symbol));
return type;
}
return assignmentKind ? getBaseTypeOfLiteralType(flowType) : flowType;
}
function isInsideFunction(node, threshold) {
return !!ts.findAncestor(node, function (n) { return n === threshold ? "quit" : ts.isFunctionLike(n); });
}
function checkNestedBlockScopedBinding(node, symbol) {
if (languageVersion >= 2 ||
(symbol.flags & (2 | 32)) === 0 ||
symbol.valueDeclaration.parent.kind === 260) {
return;
}
var container = ts.getEnclosingBlockScopeContainer(symbol.valueDeclaration);
var usedInFunction = isInsideFunction(node.parent, container);
var current = container;
var containedInIterationStatement = false;
while (current && !ts.nodeStartsNewLexicalEnvironment(current)) {
if (ts.isIterationStatement(current, false)) {
containedInIterationStatement = true;
break;
}
current = current.parent;
}
if (containedInIterationStatement) {
if (usedInFunction) {
getNodeLinks(current).flags |= 65536;
}
if (container.kind === 214 &&
ts.getAncestor(symbol.valueDeclaration, 227).parent === container &&
isAssignedInBodyOfForStatement(node, container)) {
getNodeLinks(symbol.valueDeclaration).flags |= 2097152;
}
getNodeLinks(symbol.valueDeclaration).flags |= 262144;
}
if (usedInFunction) {
getNodeLinks(symbol.valueDeclaration).flags |= 131072;
}
}
function isAssignedInBodyOfForStatement(node, container) {
var current = node;
while (current.parent.kind === 185) {
current = current.parent;
}
var isAssigned = false;
if (ts.isAssignmentTarget(current)) {
isAssigned = true;
}
else if ((current.parent.kind === 192 || current.parent.kind === 193)) {
var expr = current.parent;
isAssigned = expr.operator === 43 || expr.operator === 44;
}
if (!isAssigned) {
return false;
}
return !!ts.findAncestor(current, function (n) { return n === container ? "quit" : n === container.statement; });
}
function captureLexicalThis(node, container) {
getNodeLinks(node).flags |= 2;
if (container.kind === 149 || container.kind === 152) {
var classNode = container.parent;
getNodeLinks(classNode).flags |= 4;
}
else {
getNodeLinks(container).flags |= 4;
}
}
function findFirstSuperCall(n) {
if (ts.isSuperCall(n)) {
return n;
}
else if (ts.isFunctionLike(n)) {
return undefined;
}
return ts.forEachChild(n, findFirstSuperCall);
}
function getSuperCallInConstructor(constructor) {
var links = getNodeLinks(constructor);
if (links.hasSuperCall === undefined) {
links.superCall = findFirstSuperCall(constructor.body);
links.hasSuperCall = links.superCall ? true : false;
}
return links.superCall;
}
function classDeclarationExtendsNull(classDecl) {
var classSymbol = getSymbolOfNode(classDecl);
var classInstanceType = getDeclaredTypeOfSymbol(classSymbol);
var baseConstructorType = getBaseConstructorTypeOfClass(classInstanceType);
return baseConstructorType === nullWideningType;
}
function checkThisBeforeSuper(node, container, diagnosticMessage) {
var containingClassDecl = container.parent;
var baseTypeNode = ts.getClassExtendsHeritageClauseElement(containingClassDecl);
if (baseTypeNode && !classDeclarationExtendsNull(containingClassDecl)) {
var superCall = getSuperCallInConstructor(container);
if (!superCall || superCall.end > node.pos) {
error(node, diagnosticMessage);
}
}
}
function checkThisExpression(node) {
var container = ts.getThisContainer(node, true);
var needToCaptureLexicalThis = false;
if (container.kind === 152) {
checkThisBeforeSuper(node, container, ts.Diagnostics.super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class);
}
if (container.kind === 187) {
container = ts.getThisContainer(container, false);
needToCaptureLexicalThis = (languageVersion < 2);
}
switch (container.kind) {
case 233:
error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_module_or_namespace_body);
break;
case 232:
error(node, ts.Diagnostics.this_cannot_be_referenced_in_current_location);
break;
case 152:
if (isInConstructorArgumentInitializer(node, container)) {
error(node, ts.Diagnostics.this_cannot_be_referenced_in_constructor_arguments);
}
break;
case 149:
case 148:
if (ts.hasModifier(container, 32)) {
error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_static_property_initializer);
}
break;
case 144:
error(node, ts.Diagnostics.this_cannot_be_referenced_in_a_computed_property_name);
break;
}
if (needToCaptureLexicalThis) {
captureLexicalThis(node, container);
}
if (ts.isFunctionLike(container) &&
(!isInParameterInitializerBeforeContainingFunction(node) || ts.getThisParameter(container))) {
if (container.kind === 186 &&
container.parent.kind === 194 &&
ts.getSpecialPropertyAssignmentKind(container.parent) === 3) {
var className = container.parent
.left
.expression
.expression;
var classSymbol = checkExpression(className).symbol;
if (classSymbol && classSymbol.members && (classSymbol.flags & 16)) {
return getInferredClassType(classSymbol);
}
}
var thisType = getThisTypeOfDeclaration(container) || getContextualThisParameterType(container);
if (thisType) {
return thisType;
}
}
if (ts.isClassLike(container.parent)) {
var symbol = getSymbolOfNode(container.parent);
var type = ts.hasModifier(container, 32) ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType;
return getFlowTypeOfReference(node, type);
}
if (ts.isInJavaScriptFile(node)) {
var type = getTypeForThisExpressionFromJSDoc(container);
if (type && type !== unknownType) {
return type;
}
}
if (noImplicitThis) {
error(node, ts.Diagnostics.this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation);
}
return anyType;
}
function getTypeForThisExpressionFromJSDoc(node) {
var jsdocType = ts.getJSDocType(node);
if (jsdocType && jsdocType.kind === 273) {
var jsDocFunctionType = jsdocType;
if (jsDocFunctionType.parameters.length > 0 &&
jsDocFunctionType.parameters[0].name &&
jsDocFunctionType.parameters[0].name.escapedText === "this") {
return getTypeFromTypeNode(jsDocFunctionType.parameters[0].type);
}
}
}
function isInConstructorArgumentInitializer(node, constructorDecl) {
return !!ts.findAncestor(node, function (n) { return n === constructorDecl ? "quit" : n.kind === 146; });
}
function checkSuperExpression(node) {
var isCallExpression = node.parent.kind === 181 && node.parent.expression === node;
var container = ts.getSuperContainer(node, true);
var needToCaptureLexicalThis = false;
if (!isCallExpression) {
while (container && container.kind === 187) {
container = ts.getSuperContainer(container, true);
needToCaptureLexicalThis = languageVersion < 2;
}
}
var canUseSuperExpression = isLegalUsageOfSuperExpression(container);
var nodeCheckFlag = 0;
if (!canUseSuperExpression) {
var current = ts.findAncestor(node, function (n) { return n === container ? "quit" : n.kind === 144; });
if (current && current.kind === 144) {
error(node, ts.Diagnostics.super_cannot_be_referenced_in_a_computed_property_name);
}
else if (isCallExpression) {
error(node, ts.Diagnostics.Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors);
}
else if (!container || !container.parent || !(ts.isClassLike(container.parent) || container.parent.kind === 178)) {
error(node, ts.Diagnostics.super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions);
}
else {
error(node, ts.Diagnostics.super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class);
}
return unknownType;
}
if (!isCallExpression && container.kind === 152) {
checkThisBeforeSuper(node, container, ts.Diagnostics.super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class);
}
if (ts.hasModifier(container, 32) || isCallExpression) {
nodeCheckFlag = 512;
}
else {
nodeCheckFlag = 256;
}
getNodeLinks(node).flags |= nodeCheckFlag;
if (container.kind === 151 && ts.hasModifier(container, 256)) {
if (ts.isSuperProperty(node.parent) && ts.isAssignmentTarget(node.parent)) {
getNodeLinks(container).flags |= 4096;
}
else {
getNodeLinks(container).flags |= 2048;
}
}
if (needToCaptureLexicalThis) {
captureLexicalThis(node.parent, container);
}
if (container.parent.kind === 178) {
if (languageVersion < 2) {
error(node, ts.Diagnostics.super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_higher);
return unknownType;
}
else {
return anyType;
}
}
var classLikeDeclaration = container.parent;
var classType = getDeclaredTypeOfSymbol(getSymbolOfNode(classLikeDeclaration));
var baseClassType = classType && getBaseTypes(classType)[0];
if (!baseClassType) {
if (!ts.getClassExtendsHeritageClauseElement(classLikeDeclaration)) {
error(node, ts.Diagnostics.super_can_only_be_referenced_in_a_derived_class);
}
return unknownType;
}
if (container.kind === 152 && isInConstructorArgumentInitializer(node, container)) {
error(node, ts.Diagnostics.super_cannot_be_referenced_in_constructor_arguments);
return unknownType;
}
return nodeCheckFlag === 512
? getBaseConstructorTypeOfClass(classType)
: getTypeWithThisArgument(baseClassType, classType.thisType);
function isLegalUsageOfSuperExpression(container) {
if (!container) {
return false;
}
if (isCallExpression) {
return container.kind === 152;
}
else {
if (ts.isClassLike(container.parent) || container.parent.kind === 178) {
if (ts.hasModifier(container, 32)) {
return container.kind === 151 ||
container.kind === 150 ||
container.kind === 153 ||
container.kind === 154;
}
else {
return container.kind === 151 ||
container.kind === 150 ||
container.kind === 153 ||
container.kind === 154 ||
container.kind === 149 ||
container.kind === 148 ||
container.kind === 152;
}
}
}
return false;
}
}
function getContainingObjectLiteral(func) {
return (func.kind === 151 ||
func.kind === 153 ||
func.kind === 154) && func.parent.kind === 178 ? func.parent :
func.kind === 186 && func.parent.kind === 261 ? func.parent.parent :
undefined;
}
function getThisTypeArgument(type) {
return getObjectFlags(type) & 4 && type.target === globalThisType ? type.typeArguments[0] : undefined;
}
function getThisTypeFromContextualType(type) {
return mapType(type, function (t) {
return t.flags & 131072 ? ts.forEach(t.types, getThisTypeArgument) : getThisTypeArgument(t);
});
}
function getContextualThisParameterType(func) {
if (func.kind === 187) {
return undefined;
}
if (isContextSensitiveFunctionOrObjectLiteralMethod(func)) {
var contextualSignature = getContextualSignature(func);
if (contextualSignature) {
var thisParameter = contextualSignature.thisParameter;
if (thisParameter) {
return getTypeOfSymbol(thisParameter);
}
}
}
var inJs = ts.isInJavaScriptFile(func);
if (noImplicitThis || inJs) {
var containingLiteral = getContainingObjectLiteral(func);
if (containingLiteral) {
var contextualType = getApparentTypeOfContextualType(containingLiteral);
var literal = containingLiteral;
var type = contextualType;
while (type) {
var thisType = getThisTypeFromContextualType(type);
if (thisType) {
return instantiateType(thisType, getContextualMapper(containingLiteral));
}
if (literal.parent.kind !== 261) {
break;
}
literal = literal.parent.parent;
type = getApparentTypeOfContextualType(literal);
}
return contextualType ? getNonNullableType(contextualType) : checkExpressionCached(containingLiteral);
}
var parent = func.parent;
if (parent.kind === 194 && parent.operatorToken.kind === 58) {
var target = parent.left;
if (target.kind === 179 || target.kind === 180) {
var expression = target.expression;
if (inJs && ts.isIdentifier(expression)) {
var sourceFile = ts.getSourceFileOfNode(parent);
if (sourceFile.commonJsModuleIndicator && getResolvedSymbol(expression) === sourceFile.symbol) {
return undefined;
}
}
return checkExpressionCached(expression);
}
}
}
return undefined;
}
function getContextuallyTypedParameterType(parameter) {
var func = parameter.parent;
if (isContextSensitiveFunctionOrObjectLiteralMethod(func)) {
var iife = ts.getImmediatelyInvokedFunctionExpression(func);
if (iife && iife.arguments) {
var indexOfParameter = ts.indexOf(func.parameters, parameter);
if (parameter.dotDotDotToken) {
var restTypes = [];
for (var i = indexOfParameter; i < iife.arguments.length; i++) {
restTypes.push(getWidenedLiteralType(checkExpression(iife.arguments[i])));
}
return restTypes.length ? createArrayType(getUnionType(restTypes)) : undefined;
}
var links = getNodeLinks(iife);
var cached = links.resolvedSignature;
links.resolvedSignature = anySignature;
var type = indexOfParameter < iife.arguments.length ?
getWidenedLiteralType(checkExpression(iife.arguments[indexOfParameter])) :
parameter.initializer ? undefined : undefinedWideningType;
links.resolvedSignature = cached;
return type;
}
var contextualSignature = getContextualSignature(func);
if (contextualSignature) {
var funcHasRestParameters = ts.hasRestParameter(func);
var len = func.parameters.length - (funcHasRestParameters ? 1 : 0);
var indexOfParameter = ts.indexOf(func.parameters, parameter);
if (ts.getThisParameter(func) !== undefined && !contextualSignature.thisParameter) {
ts.Debug.assert(indexOfParameter !== 0);
indexOfParameter -= 1;
}
if (indexOfParameter < len) {
return getTypeAtPosition(contextualSignature, indexOfParameter);
}
if (funcHasRestParameters &&
indexOfParameter === (func.parameters.length - 1) &&
isRestParameterIndex(contextualSignature, func.parameters.length - 1)) {
return getTypeOfSymbol(ts.lastOrUndefined(contextualSignature.parameters));
}
}
}
return undefined;
}
function getContextualTypeForInitializerExpression(node) {
var declaration = node.parent;
if (node === declaration.initializer) {
var typeNode = ts.getEffectiveTypeAnnotationNode(declaration);
if (typeNode) {
return getTypeFromTypeNode(typeNode);
}
if (declaration.kind === 146) {
var type = getContextuallyTypedParameterType(declaration);
if (type) {
return type;
}
}
if (ts.isBindingPattern(declaration.name)) {
return getTypeFromBindingPattern(declaration.name, true, false);
}
if (ts.isBindingPattern(declaration.parent)) {
var parentDeclaration = declaration.parent.parent;
var name = declaration.propertyName || declaration.name;
if (parentDeclaration.kind !== 176) {
var parentTypeNode = ts.getEffectiveTypeAnnotationNode(parentDeclaration);
if (parentTypeNode && !ts.isBindingPattern(name)) {
var text = ts.getTextOfPropertyName(name);
if (text) {
return getTypeOfPropertyOfType(getTypeFromTypeNode(parentTypeNode), text);
}
}
}
}
}
return undefined;
}
function getContextualTypeForReturnExpression(node) {
var func = ts.getContainingFunction(node);
if (func) {
var functionFlags = ts.getFunctionFlags(func);
if (functionFlags & 1) {
return undefined;
}
var contextualReturnType = getContextualReturnType(func);
return functionFlags & 2
? contextualReturnType && getAwaitedTypeOfPromise(contextualReturnType)
: contextualReturnType;
}
return undefined;
}
function getContextualTypeForYieldOperand(node) {
var func = ts.getContainingFunction(node);
if (func) {
var functionFlags = ts.getFunctionFlags(func);
var contextualReturnType = getContextualReturnType(func);
if (contextualReturnType) {
return node.asteriskToken
? contextualReturnType
: getIteratedTypeOfGenerator(contextualReturnType, (functionFlags & 2) !== 0);
}
}
return undefined;
}
function isInParameterInitializerBeforeContainingFunction(node) {
while (node.parent && !ts.isFunctionLike(node.parent)) {
if (node.parent.kind === 146 && node.parent.initializer === node) {
return true;
}
node = node.parent;
}
return false;
}
function getContextualReturnType(functionDecl) {
if (functionDecl.kind === 152 ||
ts.getEffectiveReturnTypeNode(functionDecl) ||
isGetAccessorWithAnnotatedSetAccessor(functionDecl)) {
return getReturnTypeOfSignature(getSignatureFromDeclaration(functionDecl));
}
var signature = getContextualSignatureForFunctionLikeDeclaration(functionDecl);
if (signature && !isResolvingReturnTypeOfSignature(signature)) {
return getReturnTypeOfSignature(signature);
}
return undefined;
}
function getContextualTypeForArgument(callTarget, arg) {
var args = getEffectiveCallArguments(callTarget);
var argIndex = ts.indexOf(args, arg);
if (argIndex >= 0) {
var signature = getNodeLinks(callTarget).resolvedSignature === resolvingSignature ? resolvingSignature : getResolvedSignature(callTarget);
return getTypeAtPosition(signature, argIndex);
}
return undefined;
}
function getContextualTypeForSubstitutionExpression(template, substitutionExpression) {
if (template.parent.kind === 183) {
return getContextualTypeForArgument(template.parent, substitutionExpression);
}
return undefined;
}
function getContextualTypeForBinaryOperand(node) {
var binaryExpression = node.parent;
var operator = binaryExpression.operatorToken.kind;
if (ts.isAssignmentOperator(operator)) {
if (node === binaryExpression.right) {
switch (ts.getSpecialPropertyAssignmentKind(binaryExpression)) {
case 0:
break;
case 5:
if (!binaryExpression.left.symbol) {
break;
}
case 1:
case 2:
case 3:
case 4:
return undefined;
}
return getTypeOfExpression(binaryExpression.left);
}
}
else if (operator === 54) {
var type = getContextualType(binaryExpression);
if (!type && node === binaryExpression.right) {
type = getTypeOfExpression(binaryExpression.left, true);
}
return type;
}
else if (operator === 53 || operator === 26) {
if (node === binaryExpression.right) {
return getContextualType(binaryExpression);
}
}
return undefined;
}
function getTypeOfPropertyOfContextualType(type, name) {
return mapType(type, function (t) {
var prop = t.flags & 229376 ? getPropertyOfType(t, name) : undefined;
return prop ? getTypeOfSymbol(prop) : undefined;
});
}
function getIndexTypeOfContextualType(type, kind) {
return mapType(type, function (t) { return getIndexTypeOfStructuredType(t, kind); });
}
function contextualTypeIsTupleLikeType(type) {
return !!(type.flags & 65536 ? ts.forEach(type.types, isTupleLikeType) : isTupleLikeType(type));
}
function getContextualTypeForObjectLiteralMethod(node) {
ts.Debug.assert(ts.isObjectLiteralMethod(node));
if (isInsideWithStatementBody(node)) {
return undefined;
}
return getContextualTypeForObjectLiteralElement(node);
}
function getContextualTypeForObjectLiteralElement(element) {
var objectLiteral = element.parent;
var type = getApparentTypeOfContextualType(objectLiteral);
if (type) {
if (!ts.hasDynamicName(element)) {
var symbolName_1 = getSymbolOfNode(element).escapedName;
var propertyType = getTypeOfPropertyOfContextualType(type, symbolName_1);
if (propertyType) {
return propertyType;
}
}
return isNumericName(element.name) && getIndexTypeOfContextualType(type, 1) ||
getIndexTypeOfContextualType(type, 0);
}
return undefined;
}
function getContextualTypeForElementExpression(arrayContextualType, index) {
return arrayContextualType && (getTypeOfPropertyOfContextualType(arrayContextualType, "" + index)
|| getIndexTypeOfContextualType(arrayContextualType, 1)
|| getIteratedTypeOrElementType(arrayContextualType, undefined, false, false, false));
}
function getContextualTypeForConditionalOperand(node) {
var conditional = node.parent;
return node === conditional.whenTrue || node === conditional.whenFalse ? getContextualType(conditional) : undefined;
}
function getContextualTypeForJsxExpression(node) {
var jsxAttributes = ts.isJsxAttributeLike(node.parent) ?
node.parent.parent :
node.parent.openingElement.attributes;
var attributesType = getContextualType(jsxAttributes);
if (!attributesType || isTypeAny(attributesType)) {
return undefined;
}
if (ts.isJsxAttribute(node.parent)) {
return getTypeOfPropertyOfContextualType(attributesType, node.parent.name.escapedText);
}
else if (node.parent.kind === 249) {
var jsxChildrenPropertyName = getJsxElementChildrenPropertyname();
return jsxChildrenPropertyName && jsxChildrenPropertyName !== "" ? getTypeOfPropertyOfContextualType(attributesType, jsxChildrenPropertyName) : anyType;
}
else {
return attributesType;
}
}
function getContextualTypeForJsxAttribute(attribute) {
var attributesType = getContextualType(attribute.parent);
if (ts.isJsxAttribute(attribute)) {
if (!attributesType || isTypeAny(attributesType)) {
return undefined;
}
return getTypeOfPropertyOfContextualType(attributesType, attribute.name.escapedText);
}
else {
return attributesType;
}
}
function getApparentTypeOfContextualType(node) {
var type = getContextualType(node);
return type && getApparentType(type);
}
function getContextualType(node) {
if (isInsideWithStatementBody(node)) {
return undefined;
}
if (node.contextualType) {
return node.contextualType;
}
var parent = node.parent;
switch (parent.kind) {
case 226:
case 146:
case 149:
case 148:
case 176:
return getContextualTypeForInitializerExpression(node);
case 187:
case 219:
return getContextualTypeForReturnExpression(node);
case 197:
return getContextualTypeForYieldOperand(parent);
case 181:
case 182:
return getContextualTypeForArgument(parent, node);
case 184:
case 202:
return getTypeFromTypeNode(parent.type);
case 194:
return getContextualTypeForBinaryOperand(node);
case 261:
case 262:
return getContextualTypeForObjectLiteralElement(parent);
case 263:
return getApparentTypeOfContextualType(parent.parent);
case 177: {
var arrayLiteral = parent;
var type = getApparentTypeOfContextualType(arrayLiteral);
return getContextualTypeForElementExpression(type, ts.indexOfNode(arrayLiteral.elements, node));
}
case 195:
return getContextualTypeForConditionalOperand(node);
case 205:
ts.Debug.assert(parent.parent.kind === 196);
return getContextualTypeForSubstitutionExpression(parent.parent, node);
case 185: {
var tag = ts.isInJavaScriptFile(parent) ? ts.getJSDocTypeTag(parent) : undefined;
return tag ? getTypeFromTypeNode(tag.typeExpression.type) : getContextualType(parent);
}
case 256:
return getContextualTypeForJsxExpression(parent);
case 253:
case 255:
return getContextualTypeForJsxAttribute(parent);
case 251:
case 250:
return getAttributesTypeFromJsxOpeningLikeElement(parent);
}
return undefined;
}
function getContextualMapper(node) {
node = ts.findAncestor(node, function (n) { return !!n.contextualMapper; });
return node ? node.contextualMapper : identityMapper;
}
function getContextualCallSignature(type, node) {
var signatures = getSignaturesOfStructuredType(type, 0);
if (signatures.length === 1) {
var signature = signatures[0];
if (!isAritySmaller(signature, node)) {
return signature;
}
}
}
function isAritySmaller(signature, target) {
var targetParameterCount = 0;
for (; targetParameterCount < target.parameters.length; targetParameterCount++) {
var param = target.parameters[targetParameterCount];
if (param.initializer || param.questionToken || param.dotDotDotToken || isJSDocOptionalParameter(param)) {
break;
}
}
if (target.parameters.length && ts.parameterIsThisKeyword(target.parameters[0])) {
targetParameterCount--;
}
var sourceLength = signature.hasRestParameter ? Number.MAX_VALUE : signature.parameters.length;
return sourceLength < targetParameterCount;
}
function isFunctionExpressionOrArrowFunction(node) {
return node.kind === 186 || node.kind === 187;
}
function getContextualSignatureForFunctionLikeDeclaration(node) {
return isFunctionExpressionOrArrowFunction(node) || ts.isObjectLiteralMethod(node)
? getContextualSignature(node)
: undefined;
}
function getContextualTypeForFunctionLikeDeclaration(node) {
return ts.isObjectLiteralMethod(node) ?
getContextualTypeForObjectLiteralMethod(node) :
getApparentTypeOfContextualType(node);
}
function getContextualSignature(node) {
ts.Debug.assert(node.kind !== 151 || ts.isObjectLiteralMethod(node));
var type = getContextualTypeForFunctionLikeDeclaration(node);
if (!type) {
return undefined;
}
if (!(type.flags & 65536)) {
return getContextualCallSignature(type, node);
}
var signatureList;
var types = type.types;
for (var _i = 0, types_16 = types; _i < types_16.length; _i++) {
var current = types_16[_i];
var signature = getContextualCallSignature(current, node);
if (signature) {
if (!signatureList) {
signatureList = [signature];
}
else if (!compareSignaturesIdentical(signatureList[0], signature, false, true, true, compareTypesIdentical)) {
return undefined;
}
else {
signatureList.push(signature);
}
}
}
var result;
if (signatureList) {
result = cloneSignature(signatureList[0]);
result.resolvedReturnType = undefined;
result.unionSignatures = signatureList;
}
return result;
}
function checkSpreadExpression(node, checkMode) {
if (languageVersion < 2 && compilerOptions.downlevelIteration) {
checkExternalEmitHelpers(node, 1536);
}
var arrayOrIterableType = checkExpression(node.expression, checkMode);
return checkIteratedTypeOrElementType(arrayOrIterableType, node.expression, false, false);
}
function hasDefaultValue(node) {
return (node.kind === 176 && !!node.initializer) ||
(node.kind === 194 && node.operatorToken.kind === 58);
}
function checkArrayLiteral(node, checkMode) {
var elements = node.elements;
var hasSpreadElement = false;
var elementTypes = [];
var inDestructuringPattern = ts.isAssignmentTarget(node);
var contextualType = getApparentTypeOfContextualType(node);
for (var index = 0; index < elements.length; index++) {
var e = elements[index];
if (inDestructuringPattern && e.kind === 198) {
var restArrayType = checkExpression(e.expression, checkMode);
var restElementType = getIndexTypeOfType(restArrayType, 1) ||
getIteratedTypeOrElementType(restArrayType, undefined, false, false, false);
if (restElementType) {
elementTypes.push(restElementType);
}
}
else {
var elementContextualType = getContextualTypeForElementExpression(contextualType, index);
var type = checkExpressionForMutableLocation(e, checkMode, elementContextualType);
elementTypes.push(type);
}
hasSpreadElement = hasSpreadElement || e.kind === 198;
}
if (!hasSpreadElement) {
if (inDestructuringPattern && elementTypes.length) {
var type = cloneTypeReference(createTupleType(elementTypes));
type.pattern = node;
return type;
}
var contextualType_1 = getApparentTypeOfContextualType(node);
if (contextualType_1 && contextualTypeIsTupleLikeType(contextualType_1)) {
var pattern = contextualType_1.pattern;
if (pattern && (pattern.kind === 175 || pattern.kind === 177)) {
var patternElements = pattern.elements;
for (var i = elementTypes.length; i < patternElements.length; i++) {
var patternElement = patternElements[i];
if (hasDefaultValue(patternElement)) {
elementTypes.push(contextualType_1.typeArguments[i]);
}
else {
if (patternElement.kind !== 200) {
error(patternElement, ts.Diagnostics.Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value);
}
elementTypes.push(unknownType);
}
}
}
if (elementTypes.length) {
return createTupleType(elementTypes);
}
}
}
return createArrayType(elementTypes.length ?
getUnionType(elementTypes, true) :
strictNullChecks ? neverType : undefinedWideningType);
}
function isNumericName(name) {
switch (name.kind) {
case 144:
return isNumericComputedName(name);
case 71:
return isNumericLiteralName(name.escapedText);
case 8:
case 9:
return isNumericLiteralName(name.text);
default:
return false;
}
}
function isNumericComputedName(name) {
return isTypeAssignableToKind(checkComputedPropertyName(name), 84);
}
function isInfinityOrNaNString(name) {
return name === "Infinity" || name === "-Infinity" || name === "NaN";
}
function isNumericLiteralName(name) {
return (+name).toString() === name;
}
function checkComputedPropertyName(node) {
var links = getNodeLinks(node.expression);
if (!links.resolvedType) {
links.resolvedType = checkExpression(node.expression);
if (links.resolvedType.flags & 6144 ||
!isTypeAssignableToKind(links.resolvedType, 262178 | 84 | 512) &&
!isTypeAssignableTo(links.resolvedType, getUnionType([stringType, numberType, esSymbolType]))) {
error(node, ts.Diagnostics.A_computed_property_name_must_be_of_type_string_number_symbol_or_any);
}
else {
checkThatExpressionIsProperSymbolReference(node.expression, links.resolvedType, true);
}
}
return links.resolvedType;
}
function getObjectLiteralIndexInfo(propertyNodes, offset, properties, kind) {
var propTypes = [];
for (var i = 0; i < properties.length; i++) {
if (kind === 0 || isNumericName(propertyNodes[i + offset].name)) {
propTypes.push(getTypeOfSymbol(properties[i]));
}
}
var unionType = propTypes.length ? getUnionType(propTypes, true) : undefinedType;
return createIndexInfo(unionType, false);
}
function checkObjectLiteral(node, checkMode) {
var inDestructuringPattern = ts.isAssignmentTarget(node);
checkGrammarObjectLiteralExpression(node, inDestructuringPattern);
var propertiesTable = ts.createSymbolTable();
var propertiesArray = [];
var spread = emptyObjectType;
var propagatedFlags = 0;
var contextualType = getApparentTypeOfContextualType(node);
var contextualTypeHasPattern = contextualType && contextualType.pattern &&
(contextualType.pattern.kind === 174 || contextualType.pattern.kind === 178);
var isJSObjectLiteral = !contextualType && ts.isInJavaScriptFile(node);
var typeFlags = 0;
var patternWithComputedProperties = false;
var hasComputedStringProperty = false;
var hasComputedNumberProperty = false;
var isInJSFile = ts.isInJavaScriptFile(node);
var offset = 0;
for (var i = 0; i < node.properties.length; i++) {
var memberDecl = node.properties[i];
var member = memberDecl.symbol;
var literalName = void 0;
if (memberDecl.kind === 261 ||
memberDecl.kind === 262 ||
ts.isObjectLiteralMethod(memberDecl)) {
var jsdocType = void 0;
if (isInJSFile) {
jsdocType = getTypeForDeclarationFromJSDocComment(memberDecl);
}
var type = void 0;
if (memberDecl.kind === 261) {
if (memberDecl.name.kind === 144) {
var t = checkComputedPropertyName(memberDecl.name);
if (t.flags & 224) {
literalName = ts.escapeLeadingUnderscores("" + t.value);
}
}
type = checkPropertyAssignment(memberDecl, checkMode);
}
else if (memberDecl.kind === 151) {
type = checkObjectLiteralMethod(memberDecl, checkMode);
}
else {
ts.Debug.assert(memberDecl.kind === 262);
type = checkExpressionForMutableLocation(memberDecl.name, checkMode);
}
if (jsdocType) {
checkTypeAssignableTo(type, jsdocType, memberDecl);
type = jsdocType;
}
typeFlags |= type.flags;
var prop = createSymbol(4 | member.flags, literalName || member.escapedName);
if (inDestructuringPattern) {
var isOptional = (memberDecl.kind === 261 && hasDefaultValue(memberDecl.initializer)) ||
(memberDecl.kind === 262 && memberDecl.objectAssignmentInitializer);
if (isOptional) {
prop.flags |= 16777216;
}
if (!literalName && ts.hasDynamicName(memberDecl)) {
patternWithComputedProperties = true;
}
}
else if (contextualTypeHasPattern && !(getObjectFlags(contextualType) & 512)) {
var impliedProp = getPropertyOfType(contextualType, member.escapedName);
if (impliedProp) {
prop.flags |= impliedProp.flags & 16777216;
}
else if (!compilerOptions.suppressExcessPropertyErrors && !getIndexInfoOfType(contextualType, 0)) {
error(memberDecl.name, ts.Diagnostics.Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1, symbolToString(member), typeToString(contextualType));
}
}
prop.declarations = member.declarations;
prop.parent = member.parent;
if (member.valueDeclaration) {
prop.valueDeclaration = member.valueDeclaration;
}
prop.type = type;
prop.target = member;
member = prop;
}
else if (memberDecl.kind === 263) {
if (languageVersion < 2) {
checkExternalEmitHelpers(memberDecl, 2);
}
if (propertiesArray.length > 0) {
spread = getSpreadType(spread, createObjectLiteralType(), node.symbol, propagatedFlags);
propertiesArray = [];
propertiesTable = ts.createSymbolTable();
hasComputedStringProperty = false;
hasComputedNumberProperty = false;
typeFlags = 0;
}
var type = checkExpression(memberDecl.expression);
if (!isValidSpreadType(type)) {
error(memberDecl, ts.Diagnostics.Spread_types_may_only_be_created_from_object_types);
return unknownType;
}
spread = getSpreadType(spread, type, node.symbol, propagatedFlags);
offset = i + 1;
continue;
}
else {
ts.Debug.assert(memberDecl.kind === 153 || memberDecl.kind === 154);
checkNodeDeferred(memberDecl);
}
if (!literalName && ts.hasDynamicName(memberDecl)) {
if (isNumericName(memberDecl.name)) {
hasComputedNumberProperty = true;
}
else {
hasComputedStringProperty = true;
}
}
else {
propertiesTable.set(member.escapedName, member);
}
propertiesArray.push(member);
}
if (contextualTypeHasPattern) {
for (var _i = 0, _a = getPropertiesOfType(contextualType); _i < _a.length; _i++) {
var prop = _a[_i];
if (!propertiesTable.get(prop.escapedName)) {
if (!(prop.flags & 16777216)) {
error(prop.valueDeclaration || prop.bindingElement, ts.Diagnostics.Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value);
}
propertiesTable.set(prop.escapedName, prop);
propertiesArray.push(prop);
}
}
}
if (spread !== emptyObjectType) {
if (propertiesArray.length > 0) {
spread = getSpreadType(spread, createObjectLiteralType(), node.symbol, propagatedFlags);
}
return spread;
}
return createObjectLiteralType();
function createObjectLiteralType() {
var stringIndexInfo = isJSObjectLiteral ? jsObjectLiteralIndexInfo : hasComputedStringProperty ? getObjectLiteralIndexInfo(node.properties, offset, propertiesArray, 0) : undefined;
var numberIndexInfo = hasComputedNumberProperty && !isJSObjectLiteral ? getObjectLiteralIndexInfo(node.properties, offset, propertiesArray, 1) : undefined;
var result = createAnonymousType(node.symbol, propertiesTable, ts.emptyArray, ts.emptyArray, stringIndexInfo, numberIndexInfo);
var freshObjectLiteralFlag = compilerOptions.suppressExcessPropertyErrors ? 0 : 1048576;
result.flags |= 4194304 | freshObjectLiteralFlag | (typeFlags & 14680064);
result.objectFlags |= 128;
if (patternWithComputedProperties) {
result.objectFlags |= 512;
}
if (inDestructuringPattern) {
result.pattern = node;
}
if (!(result.flags & 6144)) {
propagatedFlags |= (result.flags & 14680064);
}
return result;
}
}
function isValidSpreadType(type) {
return !!(type.flags & (1 | 16777216) ||
getFalsyFlags(type) & 7392 && isValidSpreadType(removeDefinitelyFalsyTypes(type)) ||
type.flags & 32768 && !isGenericMappedType(type) ||
type.flags & 196608 && !ts.forEach(type.types, function (t) { return !isValidSpreadType(t); }));
}
function checkJsxSelfClosingElement(node) {
checkJsxOpeningLikeElement(node);
return getJsxGlobalElementType() || anyType;
}
function checkJsxElement(node) {
checkJsxOpeningLikeElement(node.openingElement);
if (isJsxIntrinsicIdentifier(node.closingElement.tagName)) {
getIntrinsicTagSymbol(node.closingElement);
}
else {
checkExpression(node.closingElement.tagName);
}
return getJsxGlobalElementType() || anyType;
}
function isUnhyphenatedJsxName(name) {
return !ts.stringContains(name, "-");
}
function isJsxIntrinsicIdentifier(tagName) {
switch (tagName.kind) {
case 179:
case 99:
return false;
case 71:
return ts.isIntrinsicJsxName(tagName.escapedText);
default:
ts.Debug.fail();
}
}
function createJsxAttributesTypeFromAttributesProperty(openingLikeElement, filter, checkMode) {
var attributes = openingLikeElement.attributes;
var attributesTable = ts.createSymbolTable();
var spread = emptyObjectType;
var attributesArray = [];
var hasSpreadAnyType = false;
var typeToIntersect;
var explicitlySpecifyChildrenAttribute = false;
var jsxChildrenPropertyName = getJsxElementChildrenPropertyname();
for (var _i = 0, _a = attributes.properties; _i < _a.length; _i++) {
var attributeDecl = _a[_i];
var member = attributeDecl.symbol;
if (ts.isJsxAttribute(attributeDecl)) {
var exprType = attributeDecl.initializer ?
checkExpression(attributeDecl.initializer, checkMode) :
trueType;
var attributeSymbol = createSymbol(4 | 33554432 | member.flags, member.escapedName);
attributeSymbol.declarations = member.declarations;
attributeSymbol.parent = member.parent;
if (member.valueDeclaration) {
attributeSymbol.valueDeclaration = member.valueDeclaration;
}
attributeSymbol.type = exprType;
attributeSymbol.target = member;
attributesTable.set(attributeSymbol.escapedName, attributeSymbol);
attributesArray.push(attributeSymbol);
if (attributeDecl.name.escapedText === jsxChildrenPropertyName) {
explicitlySpecifyChildrenAttribute = true;
}
}
else {
ts.Debug.assert(attributeDecl.kind === 255);
if (attributesArray.length > 0) {
spread = getSpreadType(spread, createJsxAttributesType(attributes.symbol, attributesTable), openingLikeElement.symbol, 0);
attributesArray = [];
attributesTable = ts.createSymbolTable();
}
var exprType = checkExpression(attributeDecl.expression);
if (isTypeAny(exprType)) {
hasSpreadAnyType = true;
}
if (isValidSpreadType(exprType)) {
spread = getSpreadType(spread, exprType, openingLikeElement.symbol, 0);
}
else {
typeToIntersect = typeToIntersect ? getIntersectionType([typeToIntersect, exprType]) : exprType;
}
}
}
if (!hasSpreadAnyType) {
if (spread !== emptyObjectType) {
if (attributesArray.length > 0) {
spread = getSpreadType(spread, createJsxAttributesType(attributes.symbol, attributesTable), openingLikeElement.symbol, 0);
}
attributesArray = getPropertiesOfType(spread);
}
attributesTable = ts.createSymbolTable();
for (var _b = 0, attributesArray_1 = attributesArray; _b < attributesArray_1.length; _b++) {
var attr = attributesArray_1[_b];
if (!filter || filter(attr)) {
attributesTable.set(attr.escapedName, attr);
}
}
}
var parent = openingLikeElement.parent.kind === 249 ? openingLikeElement.parent : undefined;
if (parent && parent.openingElement === openingLikeElement && parent.children.length > 0) {
var childrenTypes = [];
for (var _c = 0, _d = parent.children; _c < _d.length; _c++) {
var child = _d[_c];
if (child.kind === 10) {
if (!child.containsOnlyWhiteSpaces) {
childrenTypes.push(stringType);
}
}
else {
childrenTypes.push(checkExpression(child, checkMode));
}
}
if (!hasSpreadAnyType && jsxChildrenPropertyName && jsxChildrenPropertyName !== "") {
if (explicitlySpecifyChildrenAttribute) {
error(attributes, ts.Diagnostics._0_are_specified_twice_The_attribute_named_0_will_be_overwritten, ts.unescapeLeadingUnderscores(jsxChildrenPropertyName));
}
var childrenPropSymbol = createSymbol(4 | 33554432, jsxChildrenPropertyName);
childrenPropSymbol.type = childrenTypes.length === 1 ?
childrenTypes[0] :
createArrayType(getUnionType(childrenTypes, false));
attributesTable.set(jsxChildrenPropertyName, childrenPropSymbol);
}
}
if (hasSpreadAnyType) {
return anyType;
}
var attributeType = createJsxAttributesType(attributes.symbol, attributesTable);
return typeToIntersect && attributesTable.size ? getIntersectionType([typeToIntersect, attributeType]) :
typeToIntersect ? typeToIntersect : attributeType;
function createJsxAttributesType(symbol, attributesTable) {
var result = createAnonymousType(symbol, attributesTable, ts.emptyArray, ts.emptyArray, undefined, undefined);
result.flags |= 33554432 | 4194304;
result.objectFlags |= 128;
return result;
}
}
function checkJsxAttributes(node, checkMode) {
return createJsxAttributesTypeFromAttributesProperty(node.parent, undefined, checkMode);
}
function getJsxType(name) {
var jsxType = jsxTypes.get(name);
if (jsxType === undefined) {
jsxTypes.set(name, jsxType = getExportedTypeFromNamespace(JsxNames.JSX, name) || unknownType);
}
return jsxType;
}
function getIntrinsicTagSymbol(node) {
var links = getNodeLinks(node);
if (!links.resolvedSymbol) {
var intrinsicElementsType = getJsxType(JsxNames.IntrinsicElements);
if (intrinsicElementsType !== unknownType) {
if (!ts.isIdentifier(node.tagName))
throw ts.Debug.fail();
var intrinsicProp = getPropertyOfType(intrinsicElementsType, node.tagName.escapedText);
if (intrinsicProp) {
links.jsxFlags |= 1;
return links.resolvedSymbol = intrinsicProp;
}
var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, 0);
if (indexSignatureType) {
links.jsxFlags |= 2;
return links.resolvedSymbol = intrinsicElementsType.symbol;
}
error(node, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.idText(node.tagName), "JSX." + JsxNames.IntrinsicElements);
return links.resolvedSymbol = unknownSymbol;
}
else {
if (noImplicitAny) {
error(node, ts.Diagnostics.JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists, ts.unescapeLeadingUnderscores(JsxNames.IntrinsicElements));
}
return links.resolvedSymbol = unknownSymbol;
}
}
return links.resolvedSymbol;
}
function getJsxElementInstanceType(node, valueType) {
ts.Debug.assert(!(valueType.flags & 65536));
if (isTypeAny(valueType)) {
return anyType;
}
var signatures = getSignaturesOfType(valueType, 1);
if (signatures.length === 0) {
signatures = getSignaturesOfType(valueType, 0);
if (signatures.length === 0) {
error(node.tagName, ts.Diagnostics.JSX_element_type_0_does_not_have_any_construct_or_call_signatures, ts.getTextOfNode(node.tagName));
return unknownType;
}
}
var instantiatedSignatures = [];
for (var _i = 0, signatures_3 = signatures; _i < signatures_3.length; _i++) {
var signature = signatures_3[_i];
if (signature.typeParameters) {
var isJavascript = ts.isInJavaScriptFile(node);
var typeArguments = fillMissingTypeArguments(undefined, signature.typeParameters, 0, isJavascript);
instantiatedSignatures.push(getSignatureInstantiation(signature, typeArguments, isJavascript));
}
else {
instantiatedSignatures.push(signature);
}
}
return getUnionType(ts.map(instantiatedSignatures, getReturnTypeOfSignature), true);
}
function getNameFromJsxElementAttributesContainer(nameOfAttribPropContainer) {
var jsxNamespace = getGlobalSymbol(JsxNames.JSX, 1920, undefined);
var jsxElementAttribPropInterfaceSym = jsxNamespace && getSymbol(jsxNamespace.exports, nameOfAttribPropContainer, 793064);
var jsxElementAttribPropInterfaceType = jsxElementAttribPropInterfaceSym && getDeclaredTypeOfSymbol(jsxElementAttribPropInterfaceSym);
var propertiesOfJsxElementAttribPropInterface = jsxElementAttribPropInterfaceType && getPropertiesOfType(jsxElementAttribPropInterfaceType);
if (propertiesOfJsxElementAttribPropInterface) {
if (propertiesOfJsxElementAttribPropInterface.length === 0) {
return "";
}
else if (propertiesOfJsxElementAttribPropInterface.length === 1) {
return propertiesOfJsxElementAttribPropInterface[0].escapedName;
}
else if (propertiesOfJsxElementAttribPropInterface.length > 1) {
error(jsxElementAttribPropInterfaceSym.declarations[0], ts.Diagnostics.The_global_type_JSX_0_may_not_have_more_than_one_property, ts.unescapeLeadingUnderscores(nameOfAttribPropContainer));
}
}
return undefined;
}
function getJsxElementPropertiesName() {
if (!_hasComputedJsxElementPropertiesName) {
_hasComputedJsxElementPropertiesName = true;
_jsxElementPropertiesName = getNameFromJsxElementAttributesContainer(JsxNames.ElementAttributesPropertyNameContainer);
}
return _jsxElementPropertiesName;
}
function getJsxElementChildrenPropertyname() {
if (!_hasComputedJsxElementChildrenPropertyName) {
_hasComputedJsxElementChildrenPropertyName = true;
_jsxElementChildrenPropertyName = getNameFromJsxElementAttributesContainer(JsxNames.ElementChildrenAttributeNameContainer);
}
return _jsxElementChildrenPropertyName;
}
function getApparentTypeOfJsxPropsType(propsType) {
if (!propsType) {
return undefined;
}
if (propsType.flags & 131072) {
var propsApparentType = [];
for (var _i = 0, _a = propsType.types; _i < _a.length; _i++) {
var t = _a[_i];
propsApparentType.push(getApparentType(t));
}
return getIntersectionType(propsApparentType);
}
return getApparentType(propsType);
}
function defaultTryGetJsxStatelessFunctionAttributesType(openingLikeElement, elementType, elemInstanceType, elementClassType) {
ts.Debug.assert(!(elementType.flags & 65536));
if (!elementClassType || !isTypeAssignableTo(elemInstanceType, elementClassType)) {
var jsxStatelessElementType = getJsxGlobalStatelessElementType();
if (jsxStatelessElementType) {
var callSignature = getResolvedJsxStatelessFunctionSignature(openingLikeElement, elementType, undefined);
if (callSignature !== unknownSignature) {
var callReturnType = callSignature && getReturnTypeOfSignature(callSignature);
var paramType = callReturnType && (callSignature.parameters.length === 0 ? emptyObjectType : getTypeOfSymbol(callSignature.parameters[0]));
paramType = getApparentTypeOfJsxPropsType(paramType);
if (callReturnType && isTypeAssignableTo(callReturnType, jsxStatelessElementType)) {
var intrinsicAttributes = getJsxType(JsxNames.IntrinsicAttributes);
if (intrinsicAttributes !== unknownType) {
paramType = intersectTypes(intrinsicAttributes, paramType);
}
return paramType;
}
}
}
}
return undefined;
}
function tryGetAllJsxStatelessFunctionAttributesType(openingLikeElement, elementType, elemInstanceType, elementClassType) {
ts.Debug.assert(!(elementType.flags & 65536));
if (!elementClassType || !isTypeAssignableTo(elemInstanceType, elementClassType)) {
var jsxStatelessElementType = getJsxGlobalStatelessElementType();
if (jsxStatelessElementType) {
var candidatesOutArray = [];
getResolvedJsxStatelessFunctionSignature(openingLikeElement, elementType, candidatesOutArray);
var result = void 0;
var allMatchingAttributesType = void 0;
for (var _i = 0, candidatesOutArray_1 = candidatesOutArray; _i < candidatesOutArray_1.length; _i++) {
var candidate = candidatesOutArray_1[_i];
var callReturnType = getReturnTypeOfSignature(candidate);
var paramType = callReturnType && (candidate.parameters.length === 0 ? emptyObjectType : getTypeOfSymbol(candidate.parameters[0]));
paramType = getApparentTypeOfJsxPropsType(paramType);
if (callReturnType && isTypeAssignableTo(callReturnType, jsxStatelessElementType)) {
var shouldBeCandidate = true;
for (var _a = 0, _b = openingLikeElement.attributes.properties; _a < _b.length; _a++) {
var attribute = _b[_a];
if (ts.isJsxAttribute(attribute) &&
isUnhyphenatedJsxName(attribute.name.escapedText) &&
!getPropertyOfType(paramType, attribute.name.escapedText)) {
shouldBeCandidate = false;
break;
}
}
if (shouldBeCandidate) {
result = intersectTypes(result, paramType);
}
allMatchingAttributesType = intersectTypes(allMatchingAttributesType, paramType);
}
}
if (!result) {
result = allMatchingAttributesType;
}
var intrinsicAttributes = getJsxType(JsxNames.IntrinsicAttributes);
if (intrinsicAttributes !== unknownType) {
result = intersectTypes(intrinsicAttributes, result);
}
return result;
}
}
return undefined;
}
function resolveCustomJsxElementAttributesType(openingLikeElement, shouldIncludeAllStatelessAttributesType, elementType, elementClassType) {
if (elementType === void 0) { elementType = checkExpression(openingLikeElement.tagName); }
if (elementType.flags & 65536) {
var types = elementType.types;
return getUnionType(types.map(function (type) {
return resolveCustomJsxElementAttributesType(openingLikeElement, shouldIncludeAllStatelessAttributesType, type, elementClassType);
}), true);
}
if (elementType.flags & 2) {
return anyType;
}
else if (elementType.flags & 32) {
var intrinsicElementsType = getJsxType(JsxNames.IntrinsicElements);
if (intrinsicElementsType !== unknownType) {
var stringLiteralTypeName = elementType.value;
var intrinsicProp = getPropertyOfType(intrinsicElementsType, ts.escapeLeadingUnderscores(stringLiteralTypeName));
if (intrinsicProp) {
return getTypeOfSymbol(intrinsicProp);
}
var indexSignatureType = getIndexTypeOfType(intrinsicElementsType, 0);
if (indexSignatureType) {
return indexSignatureType;
}
error(openingLikeElement, ts.Diagnostics.Property_0_does_not_exist_on_type_1, stringLiteralTypeName, "JSX." + JsxNames.IntrinsicElements);
}
return anyType;
}
var elemInstanceType = getJsxElementInstanceType(openingLikeElement, elementType);
var statelessAttributesType = shouldIncludeAllStatelessAttributesType ?
tryGetAllJsxStatelessFunctionAttributesType(openingLikeElement, elementType, elemInstanceType, elementClassType) :
defaultTryGetJsxStatelessFunctionAttributesType(openingLikeElement, elementType, elemInstanceType, elementClassType);
if (statelessAttributesType) {
return statelessAttributesType;
}
if (elementClassType) {
checkTypeRelatedTo(elemInstanceType, elementClassType, assignableRelation, openingLikeElement, ts.Diagnostics.JSX_element_type_0_is_not_a_constructor_function_for_JSX_elements);
}
if (isTypeAny(elemInstanceType)) {
return elemInstanceType;
}
var propsName = getJsxElementPropertiesName();
if (propsName === undefined) {
return anyType;
}
else if (propsName === "") {
return elemInstanceType;
}
else {
var attributesType = getTypeOfPropertyOfType(elemInstanceType, propsName);
if (!attributesType) {
return emptyObjectType;
}
else if (isTypeAny(attributesType) || (attributesType === unknownType)) {
return attributesType;
}
else {
var apparentAttributesType = attributesType;
var intrinsicClassAttribs = getJsxType(JsxNames.IntrinsicClassAttributes);
if (intrinsicClassAttribs !== unknownType) {
var typeParams = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(intrinsicClassAttribs.symbol);
if (typeParams) {
if (typeParams.length === 1) {
apparentAttributesType = intersectTypes(createTypeReference(intrinsicClassAttribs, [elemInstanceType]), apparentAttributesType);
}
}
else {
apparentAttributesType = intersectTypes(attributesType, intrinsicClassAttribs);
}
}
var intrinsicAttribs = getJsxType(JsxNames.IntrinsicAttributes);
if (intrinsicAttribs !== unknownType) {
apparentAttributesType = intersectTypes(intrinsicAttribs, apparentAttributesType);
}
return apparentAttributesType;
}
}
}
function getIntrinsicAttributesTypeFromJsxOpeningLikeElement(node) {
ts.Debug.assert(isJsxIntrinsicIdentifier(node.tagName));
var links = getNodeLinks(node);
if (!links.resolvedJsxElementAttributesType) {
var symbol = getIntrinsicTagSymbol(node);
if (links.jsxFlags & 1) {
return links.resolvedJsxElementAttributesType = getTypeOfSymbol(symbol);
}
else if (links.jsxFlags & 2) {
return links.resolvedJsxElementAttributesType = getIndexInfoOfSymbol(symbol, 0).type;
}
else {
return links.resolvedJsxElementAttributesType = unknownType;
}
}
return links.resolvedJsxElementAttributesType;
}
function getCustomJsxElementAttributesType(node, shouldIncludeAllStatelessAttributesType) {
var links = getNodeLinks(node);
var linkLocation = shouldIncludeAllStatelessAttributesType ? "resolvedJsxElementAllAttributesType" : "resolvedJsxElementAttributesType";
if (!links[linkLocation]) {
var elemClassType = getJsxGlobalElementClassType();
return links[linkLocation] = resolveCustomJsxElementAttributesType(node, shouldIncludeAllStatelessAttributesType, undefined, elemClassType);
}
return links[linkLocation];
}
function getAllAttributesTypeFromJsxOpeningLikeElement(node) {
if (isJsxIntrinsicIdentifier(node.tagName)) {
return getIntrinsicAttributesTypeFromJsxOpeningLikeElement(node);
}
else {
return getCustomJsxElementAttributesType(node, true);
}
}
function getAttributesTypeFromJsxOpeningLikeElement(node) {
if (isJsxIntrinsicIdentifier(node.tagName)) {
return getIntrinsicAttributesTypeFromJsxOpeningLikeElement(node);
}
else {
return getCustomJsxElementAttributesType(node, false);
}
}
function getJsxAttributePropertySymbol(attrib) {
var attributesType = getAttributesTypeFromJsxOpeningLikeElement(attrib.parent.parent);
var prop = getPropertyOfType(attributesType, attrib.name.escapedText);
return prop || unknownSymbol;
}
function getJsxGlobalElementClassType() {
if (!deferredJsxElementClassType) {
deferredJsxElementClassType = getExportedTypeFromNamespace(JsxNames.JSX, JsxNames.ElementClass);
}
return deferredJsxElementClassType;
}
function getJsxGlobalElementType() {
if (!deferredJsxElementType) {
deferredJsxElementType = getExportedTypeFromNamespace(JsxNames.JSX, JsxNames.Element);
}
return deferredJsxElementType;
}
function getJsxGlobalStatelessElementType() {
if (!deferredJsxStatelessElementType) {
var jsxElementType = getJsxGlobalElementType();
if (jsxElementType) {
deferredJsxStatelessElementType = getUnionType([jsxElementType, nullType]);
}
}
return deferredJsxStatelessElementType;
}
function getJsxIntrinsicTagNames() {
var intrinsics = getJsxType(JsxNames.IntrinsicElements);
return intrinsics ? getPropertiesOfType(intrinsics) : ts.emptyArray;
}
function checkJsxPreconditions(errorNode) {
if ((compilerOptions.jsx || 0) === 0) {
error(errorNode, ts.Diagnostics.Cannot_use_JSX_unless_the_jsx_flag_is_provided);
}
if (getJsxGlobalElementType() === undefined) {
if (noImplicitAny) {
error(errorNode, ts.Diagnostics.JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist);
}
}
}
function checkJsxOpeningLikeElement(node) {
checkGrammarJsxElement(node);
checkJsxPreconditions(node);
var reactRefErr = diagnostics && compilerOptions.jsx === 2 ? ts.Diagnostics.Cannot_find_name_0 : undefined;
var reactNamespace = getJsxNamespace();
var reactSym = resolveName(node.tagName, reactNamespace, 107455, reactRefErr, reactNamespace, true);
if (reactSym) {
reactSym.isReferenced = true;
if (reactSym.flags & 2097152 && !isConstEnumOrConstEnumOnlyModule(resolveAlias(reactSym))) {
markAliasSymbolAsReferenced(reactSym);
}
}
checkJsxAttributesAssignableToTagNameAttributes(node);
}
function isKnownProperty(targetType, name, isComparingJsxAttributes) {
if (targetType.flags & 32768) {
var resolved = resolveStructuredTypeMembers(targetType);
if (resolved.stringIndexInfo ||
resolved.numberIndexInfo && isNumericLiteralName(name) ||
getPropertyOfObjectType(targetType, name) ||
isComparingJsxAttributes && !isUnhyphenatedJsxName(name)) {
return true;
}
}
else if (targetType.flags & 196608) {
for (var _i = 0, _a = targetType.types; _i < _a.length; _i++) {
var t = _a[_i];
if (isKnownProperty(t, name, isComparingJsxAttributes)) {
return true;
}
}
}
return false;
}
function checkJsxAttributesAssignableToTagNameAttributes(openingLikeElement) {
var targetAttributesType = isJsxIntrinsicIdentifier(openingLikeElement.tagName) ?
getIntrinsicAttributesTypeFromJsxOpeningLikeElement(openingLikeElement) :
getCustomJsxElementAttributesType(openingLikeElement, false);
var sourceAttributesType = createJsxAttributesTypeFromAttributesProperty(openingLikeElement, function (attribute) {
return isUnhyphenatedJsxName(attribute.escapedName) || !!(getPropertyOfType(targetAttributesType, attribute.escapedName));
});
if (targetAttributesType === emptyObjectType && (isTypeAny(sourceAttributesType) || sourceAttributesType.properties.length > 0)) {
error(openingLikeElement, ts.Diagnostics.JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property, ts.unescapeLeadingUnderscores(getJsxElementPropertiesName()));
}
else {
var isSourceAttributeTypeAssignableToTarget = checkTypeAssignableTo(sourceAttributesType, targetAttributesType, openingLikeElement.attributes.properties.length > 0 ? openingLikeElement.attributes : openingLikeElement);
if (isSourceAttributeTypeAssignableToTarget && !isTypeAny(sourceAttributesType) && !isTypeAny(targetAttributesType)) {
for (var _i = 0, _a = openingLikeElement.attributes.properties; _i < _a.length; _i++) {
var attribute = _a[_i];
if (ts.isJsxAttribute(attribute) && !isKnownProperty(targetAttributesType, attribute.name.escapedText, true)) {
error(attribute, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.idText(attribute.name), typeToString(targetAttributesType));
break;
}
}
}
}
}
function checkJsxExpression(node, checkMode) {
if (node.expression) {
var type = checkExpression(node.expression, checkMode);
if (node.dotDotDotToken && type !== anyType && !isArrayType(type)) {
error(node, ts.Diagnostics.JSX_spread_child_must_be_an_array_type);
}
return type;
}
else {
return unknownType;
}
}
function getDeclarationKindFromSymbol(s) {
return s.valueDeclaration ? s.valueDeclaration.kind : 149;
}
function getDeclarationNodeFlagsFromSymbol(s) {
return s.valueDeclaration ? ts.getCombinedNodeFlags(s.valueDeclaration) : 0;
}
function isMethodLike(symbol) {
return !!(symbol.flags & 8192 || ts.getCheckFlags(symbol) & 4);
}
function checkPropertyAccessibility(node, left, type, prop) {
var flags = ts.getDeclarationModifierFlagsFromSymbol(prop);
var errorNode = node.kind === 179 || node.kind === 226 ?
node.name :
node.right;
if (ts.getCheckFlags(prop) & 256) {
error(errorNode, ts.Diagnostics.Property_0_has_conflicting_declarations_and_is_inaccessible_in_type_1, symbolToString(prop), typeToString(type));
return false;
}
if (left.kind === 97) {
if (languageVersion < 2) {
var hasNonMethodDeclaration = forEachProperty(prop, function (p) {
var propKind = getDeclarationKindFromSymbol(p);
return propKind !== 151 && propKind !== 150;
});
if (hasNonMethodDeclaration) {
error(errorNode, ts.Diagnostics.Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword);
return false;
}
}
if (flags & 128) {
error(errorNode, ts.Diagnostics.Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression, symbolToString(prop), typeToString(getDeclaringClass(prop)));
return false;
}
}
if (!(flags & 24)) {
return true;
}
if (flags & 8) {
var declaringClassDeclaration = getClassLikeDeclarationOfSymbol(getParentOfSymbol(prop));
if (!isNodeWithinClass(node, declaringClassDeclaration)) {
error(errorNode, ts.Diagnostics.Property_0_is_private_and_only_accessible_within_class_1, symbolToString(prop), typeToString(getDeclaringClass(prop)));
return false;
}
return true;
}
if (left.kind === 97) {
return true;
}
var enclosingClass = forEachEnclosingClass(node, function (enclosingDeclaration) {
var enclosingClass = getDeclaredTypeOfSymbol(getSymbolOfNode(enclosingDeclaration));
return isClassDerivedFromDeclaringClasses(enclosingClass, prop) ? enclosingClass : undefined;
});
if (!enclosingClass) {
error(errorNode, ts.Diagnostics.Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses, symbolToString(prop), typeToString(getDeclaringClass(prop) || type));
return false;
}
if (flags & 32) {
return true;
}
if (type.flags & 16384 && type.isThisType) {
type = getConstraintOfTypeParameter(type);
}
if (!(getObjectFlags(getTargetType(type)) & 3 && hasBaseType(type, enclosingClass))) {
error(errorNode, ts.Diagnostics.Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1, symbolToString(prop), typeToString(enclosingClass));
return false;
}
return true;
}
function checkNonNullExpression(node) {
return checkNonNullType(checkExpression(node), node);
}
function checkNonNullType(type, errorNode) {
var kind = (strictNullChecks ? getFalsyFlags(type) : type.flags) & 6144;
if (kind) {
error(errorNode, kind & 2048 ? kind & 4096 ?
ts.Diagnostics.Object_is_possibly_null_or_undefined :
ts.Diagnostics.Object_is_possibly_undefined :
ts.Diagnostics.Object_is_possibly_null);
var t = getNonNullableType(type);
return t.flags & (6144 | 8192) ? unknownType : t;
}
return type;
}
function checkPropertyAccessExpression(node) {
return checkPropertyAccessExpressionOrQualifiedName(node, node.expression, node.name);
}
function checkQualifiedName(node) {
return checkPropertyAccessExpressionOrQualifiedName(node, node.left, node.right);
}
function checkPropertyAccessExpressionOrQualifiedName(node, left, right) {
var type = checkNonNullExpression(left);
if (isTypeAny(type) || type === silentNeverType) {
return type;
}
var apparentType = getApparentType(getWidenedType(type));
if (apparentType === unknownType || (type.flags & 16384 && isTypeAny(apparentType))) {
return apparentType;
}
var prop = getPropertyOfType(apparentType, right.escapedText);
if (!prop) {
var indexInfo = getIndexInfoOfType(apparentType, 0);
if (indexInfo && indexInfo.type) {
if (indexInfo.isReadonly && (ts.isAssignmentTarget(node) || ts.isDeleteTarget(node))) {
error(node, ts.Diagnostics.Index_signature_in_type_0_only_permits_reading, typeToString(apparentType));
}
return indexInfo.type;
}
if (right.escapedText && !checkAndReportErrorForExtendingInterface(node)) {
reportNonexistentProperty(right, type.flags & 16384 && type.isThisType ? apparentType : type);
}
return unknownType;
}
checkPropertyNotUsedBeforeDeclaration(prop, node, right);
markPropertyAsReferenced(prop, node, left.kind === 99);
getNodeLinks(node).resolvedSymbol = prop;
checkPropertyAccessibility(node, left, apparentType, prop);
var propType = getDeclaredOrApparentType(prop, node);
var assignmentKind = ts.getAssignmentTargetKind(node);
if (assignmentKind) {
if (isReferenceToReadonlyEntity(node, prop) || isReferenceThroughNamespaceImport(node)) {
error(right, ts.Diagnostics.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property, ts.idText(right));
return unknownType;
}
}
if (node.kind !== 179 || assignmentKind === 1 ||
!(prop.flags & (3 | 4 | 98304)) &&
!(prop.flags & 8192 && propType.flags & 65536)) {
return propType;
}
var flowType = getFlowTypeOfReference(node, propType);
return assignmentKind ? getBaseTypeOfLiteralType(flowType) : flowType;
}
function checkPropertyNotUsedBeforeDeclaration(prop, node, right) {
var valueDeclaration = prop.valueDeclaration;
if (!valueDeclaration) {
return;
}
if (isInPropertyInitializer(node) &&
!isBlockScopedNameDeclaredBeforeUse(valueDeclaration, right)
&& !isPropertyDeclaredInAncestorClass(prop)) {
error(right, ts.Diagnostics.Block_scoped_variable_0_used_before_its_declaration, ts.idText(right));
}
else if (valueDeclaration.kind === 229 &&
node.parent.kind !== 159 &&
!ts.isInAmbientContext(valueDeclaration) &&
!isBlockScopedNameDeclaredBeforeUse(valueDeclaration, right)) {
error(right, ts.Diagnostics.Class_0_used_before_its_declaration, ts.idText(right));
}
}
function isInPropertyInitializer(node) {
return !!ts.findAncestor(node, function (node) {
switch (node.kind) {
case 149:
return true;
case 261:
return false;
default:
return ts.isPartOfExpression(node) ? false : "quit";
}
});
}
function isPropertyDeclaredInAncestorClass(prop) {
var classType = getTypeOfSymbol(prop.parent);
while (true) {
classType = getSuperClass(classType);
if (!classType) {
return false;
}
var superProperty = getPropertyOfObjectType(classType, prop.escapedName);
if (superProperty && superProperty.valueDeclaration) {
return true;
}
}
}
function getSuperClass(classType) {
var x = getBaseTypes(classType);
if (x.length === 0) {
return undefined;
}
ts.Debug.assert(x.length === 1);
return x[0];
}
function reportNonexistentProperty(propNode, containingType) {
var errorInfo;
if (containingType.flags & 65536 && !(containingType.flags & 8190)) {
for (var _i = 0, _a = containingType.types; _i < _a.length; _i++) {
var subtype = _a[_i];
if (!getPropertyOfType(subtype, propNode.escapedText)) {
errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.declarationNameToString(propNode), typeToString(subtype));
break;
}
}
}
var suggestion = getSuggestionForNonexistentProperty(propNode, containingType);
if (suggestion !== undefined) {
errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2, ts.declarationNameToString(propNode), typeToString(containingType), suggestion);
}
else {
errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Property_0_does_not_exist_on_type_1, ts.declarationNameToString(propNode), typeToString(containingType));
}
diagnostics.add(ts.createDiagnosticForNodeFromMessageChain(propNode, errorInfo));
}
function getSuggestionForNonexistentProperty(node, containingType) {
var suggestion = getSpellingSuggestionForName(ts.idText(node), getPropertiesOfType(containingType), 107455);
return suggestion && ts.symbolName(suggestion);
}
function getSuggestionForNonexistentSymbol(location, name, meaning) {
var result = resolveNameHelper(location, name, meaning, undefined, name, false, function (symbols, name, meaning) {
var symbol = getSymbol(symbols, name, meaning);
return symbol || getSpellingSuggestionForName(ts.unescapeLeadingUnderscores(name), ts.arrayFrom(symbols.values()), meaning);
});
return result && ts.symbolName(result);
}
function getSpellingSuggestionForName(name, symbols, meaning) {
var worstDistance = name.length * 0.4;
var maximumLengthDifference = Math.min(3, name.length * 0.34);
var bestDistance = Number.MAX_VALUE;
var bestCandidate = undefined;
var justCheckExactMatches = false;
if (name.length > 30) {
return undefined;
}
name = name.toLowerCase();
for (var _i = 0, symbols_3 = symbols; _i < symbols_3.length; _i++) {
var candidate = symbols_3[_i];
var candidateName = ts.symbolName(candidate);
if (candidate.flags & meaning &&
candidateName &&
Math.abs(candidateName.length - name.length) < maximumLengthDifference) {
candidateName = candidateName.toLowerCase();
if (candidateName === name) {
return candidate;
}
if (justCheckExactMatches) {
continue;
}
if (candidateName.length < 3 ||
name.length < 3 ||
candidateName === "eval" ||
candidateName === "intl" ||
candidateName === "undefined" ||
candidateName === "map" ||
candidateName === "nan" ||
candidateName === "set") {
continue;
}
var distance = ts.levenshtein(name, candidateName);
if (distance > worstDistance) {
continue;
}
if (distance < 3) {
justCheckExactMatches = true;
bestCandidate = candidate;
}
else if (distance < bestDistance) {
bestDistance = distance;
bestCandidate = candidate;
}
}
}
return bestCandidate;
}
function markPropertyAsReferenced(prop, nodeForCheckWriteOnly, isThisAccess) {
if (prop &&
noUnusedIdentifiers &&
(prop.flags & 106500) &&
prop.valueDeclaration && ts.hasModifier(prop.valueDeclaration, 8)
&& !(nodeForCheckWriteOnly && ts.isWriteOnlyAccess(nodeForCheckWriteOnly))) {
if (isThisAccess) {
var containingMethod = ts.findAncestor(nodeForCheckWriteOnly, ts.isFunctionLikeDeclaration);
if (containingMethod && containingMethod.symbol === prop) {
return;
}
}
if (ts.getCheckFlags(prop) & 1) {
getSymbolLinks(prop).target.isReferenced = true;
}
else {
prop.isReferenced = true;
}
}
}
function isValidPropertyAccess(node, propertyName) {
var left = node.kind === 179
? node.expression
: node.left;
return isValidPropertyAccessWithType(node, left, propertyName, getWidenedType(checkExpression(left)));
}
function isValidPropertyAccessWithType(node, left, propertyName, type) {
if (type !== unknownType && !isTypeAny(type)) {
var prop = getPropertyOfType(type, propertyName);
if (prop) {
return checkPropertyAccessibility(node, left, type, prop);
}
if (ts.isInJavaScriptFile(left) && (type.flags & 65536)) {
for (var _i = 0, _a = type.types; _i < _a.length; _i++) {
var elementType = _a[_i];
if (isValidPropertyAccessWithType(node, left, propertyName, elementType)) {
return true;
}
}
}
return false;
}
return true;
}
function getForInVariableSymbol(node) {
var initializer = node.initializer;
if (initializer.kind === 227) {
var variable = initializer.declarations[0];
if (variable && !ts.isBindingPattern(variable.name)) {
return getSymbolOfNode(variable);
}
}
else if (initializer.kind === 71) {
return getResolvedSymbol(initializer);
}
return undefined;
}
function hasNumericPropertyNames(type) {
return getIndexTypeOfType(type, 1) && !getIndexTypeOfType(type, 0);
}
function isForInVariableForNumericPropertyNames(expr) {
var e = ts.skipParentheses(expr);
if (e.kind === 71) {
var symbol = getResolvedSymbol(e);
if (symbol.flags & 3) {
var child = expr;
var node = expr.parent;
while (node) {
if (node.kind === 215 &&
child === node.statement &&
getForInVariableSymbol(node) === symbol &&
hasNumericPropertyNames(getTypeOfExpression(node.expression))) {
return true;
}
child = node;
node = node.parent;
}
}
}
return false;
}
function checkIndexedAccess(node) {
var objectType = checkNonNullExpression(node.expression);
var indexExpression = node.argumentExpression;
if (!indexExpression) {
var sourceFile = ts.getSourceFileOfNode(node);
if (node.parent.kind === 182 && node.parent.expression === node) {
var start = ts.skipTrivia(sourceFile.text, node.expression.end);
var end = node.end;
grammarErrorAtPos(sourceFile, start, end - start, ts.Diagnostics.new_T_cannot_be_used_to_create_an_array_Use_new_Array_T_instead);
}
else {
var start = node.end - "]".length;
var end = node.end;
grammarErrorAtPos(sourceFile, start, end - start, ts.Diagnostics.Expression_expected);
}
return unknownType;
}
var indexType = isForInVariableForNumericPropertyNames(indexExpression) ? numberType : checkExpression(indexExpression);
if (objectType === unknownType || objectType === silentNeverType) {
return objectType;
}
if (isConstEnumObjectType(objectType) && indexExpression.kind !== 9) {
error(indexExpression, ts.Diagnostics.A_const_enum_member_can_only_be_accessed_using_a_string_literal);
return unknownType;
}
return checkIndexedAccessIndexType(getIndexedAccessType(objectType, indexType, node), node);
}
function checkThatExpressionIsProperSymbolReference(expression, expressionType, reportError) {
if (expressionType === unknownType) {
return false;
}
if (!ts.isWellKnownSymbolSyntactically(expression)) {
return false;
}
if ((expressionType.flags & 512) === 0) {
if (reportError) {
error(expression, ts.Diagnostics.A_computed_property_name_of_the_form_0_must_be_of_type_symbol, ts.getTextOfNode(expression));
}
return false;
}
var leftHandSide = expression.expression;
var leftHandSideSymbol = getResolvedSymbol(leftHandSide);
if (!leftHandSideSymbol) {
return false;
}
var globalESSymbol = getGlobalESSymbolConstructorSymbol(true);
if (!globalESSymbol) {
return false;
}
if (leftHandSideSymbol !== globalESSymbol) {
if (reportError) {
error(leftHandSide, ts.Diagnostics.Symbol_reference_does_not_refer_to_the_global_Symbol_constructor_object);
}
return false;
}
return true;
}
function callLikeExpressionMayHaveTypeArguments(node) {
return ts.isCallOrNewExpression(node);
}
function resolveUntypedCall(node) {
if (callLikeExpressionMayHaveTypeArguments(node)) {
ts.forEach(node.typeArguments, checkSourceElement);
}
if (node.kind === 183) {
checkExpression(node.template);
}
else if (node.kind !== 147) {
ts.forEach(node.arguments, function (argument) {
checkExpression(argument);
});
}
return anySignature;
}
function resolveErrorCall(node) {
resolveUntypedCall(node);
return unknownSignature;
}
function reorderCandidates(signatures, result) {
var lastParent;
var lastSymbol;
var cutoffIndex = 0;
var index;
var specializedIndex = -1;
var spliceIndex;
ts.Debug.assert(!result.length);
for (var _i = 0, signatures_4 = signatures; _i < signatures_4.length; _i++) {
var signature = signatures_4[_i];
var symbol = signature.declaration && getSymbolOfNode(signature.declaration);
var parent = signature.declaration && signature.declaration.parent;
if (!lastSymbol || symbol === lastSymbol) {
if (lastParent && parent === lastParent) {
index++;
}
else {
lastParent = parent;
index = cutoffIndex;
}
}
else {
index = cutoffIndex = result.length;
lastParent = parent;
}
lastSymbol = symbol;
if (signature.hasLiteralTypes) {
specializedIndex++;
spliceIndex = specializedIndex;
cutoffIndex++;
}
else {
spliceIndex = index;
}
result.splice(spliceIndex, 0, signature);
}
}
function getSpreadArgumentIndex(args) {
for (var i = 0; i < args.length; i++) {
var arg = args[i];
if (arg && arg.kind === 198) {
return i;
}
}
return -1;
}
function hasCorrectArity(node, args, signature, signatureHelpTrailingComma) {
if (signatureHelpTrailingComma === void 0) { signatureHelpTrailingComma = false; }
var argCount;
var typeArguments;
var callIsIncomplete;
var spreadArgIndex = -1;
if (ts.isJsxOpeningLikeElement(node)) {
return true;
}
if (node.kind === 183) {
var tagExpression = node;
argCount = args.length;
typeArguments = undefined;
if (tagExpression.template.kind === 196) {
var templateExpression = tagExpression.template;
var lastSpan = ts.lastOrUndefined(templateExpression.templateSpans);
ts.Debug.assert(lastSpan !== undefined);
callIsIncomplete = ts.nodeIsMissing(lastSpan.literal) || !!lastSpan.literal.isUnterminated;
}
else {
var templateLiteral = tagExpression.template;
ts.Debug.assert(templateLiteral.kind === 13);
callIsIncomplete = !!templateLiteral.isUnterminated;
}
}
else if (node.kind === 147) {
typeArguments = undefined;
argCount = getEffectiveArgumentCount(node, undefined, signature);
}
else {
var callExpression = node;
if (!callExpression.arguments) {
ts.Debug.assert(callExpression.kind === 182);
return signature.minArgumentCount === 0;
}
argCount = signatureHelpTrailingComma ? args.length + 1 : args.length;
callIsIncomplete = callExpression.arguments.end === callExpression.end;
typeArguments = callExpression.typeArguments;
spreadArgIndex = getSpreadArgumentIndex(args);
}
var numTypeParameters = ts.length(signature.typeParameters);
var minTypeArgumentCount = getMinTypeArgumentCount(signature.typeParameters);
var hasRightNumberOfTypeArgs = !typeArguments ||
(typeArguments.length >= minTypeArgumentCount && typeArguments.length <= numTypeParameters);
if (!hasRightNumberOfTypeArgs) {
return false;
}
if (spreadArgIndex >= 0) {
return isRestParameterIndex(signature, spreadArgIndex) || spreadArgIndex >= signature.minArgumentCount;
}
if (!signature.hasRestParameter && argCount > signature.parameters.length) {
return false;
}
var hasEnoughArguments = argCount >= signature.minArgumentCount;
return callIsIncomplete || hasEnoughArguments;
}
function getSingleCallSignature(type) {
if (type.flags & 32768) {
var resolved = resolveStructuredTypeMembers(type);
if (resolved.callSignatures.length === 1 && resolved.constructSignatures.length === 0 &&
resolved.properties.length === 0 && !resolved.stringIndexInfo && !resolved.numberIndexInfo) {
return resolved.callSignatures[0];
}
}
return undefined;
}
function instantiateSignatureInContextOf(signature, contextualSignature, contextualMapper, compareTypes) {
var context = createInferenceContext(signature, 1, compareTypes);
forEachMatchingParameterType(contextualSignature, signature, function (source, target) {
inferTypes(context.inferences, instantiateType(source, contextualMapper || identityMapper), target);
});
if (!contextualMapper) {
inferTypes(context.inferences, getReturnTypeOfSignature(contextualSignature), getReturnTypeOfSignature(signature), 8);
}
return getSignatureInstantiation(signature, getInferredTypes(context), ts.isInJavaScriptFile(contextualSignature.declaration));
}
function inferTypeArguments(node, signature, args, excludeArgument, context) {
for (var _i = 0, _a = context.inferences; _i < _a.length; _i++) {
var inference = _a[_i];
if (!inference.isFixed) {
inference.inferredType = undefined;
}
}
if (node.kind !== 147) {
var contextualType = getContextualType(node);
if (contextualType) {
var instantiatedType = instantiateType(contextualType, cloneTypeMapper(getContextualMapper(node)));
var contextualSignature = getSingleCallSignature(instantiatedType);
var inferenceSourceType = contextualSignature && contextualSignature.typeParameters ?
getOrCreateTypeFromSignature(getSignatureInstantiation(contextualSignature, contextualSignature.typeParameters, ts.isInJavaScriptFile(node))) :
instantiatedType;
var inferenceTargetType = getReturnTypeOfSignature(signature);
inferTypes(context.inferences, inferenceSourceType, inferenceTargetType, 8);
}
}
var thisType = getThisTypeOfSignature(signature);
if (thisType) {
var thisArgumentNode = getThisArgumentOfCall(node);
var thisArgumentType = thisArgumentNode ? checkExpression(thisArgumentNode) : voidType;
inferTypes(context.inferences, thisArgumentType, thisType);
}
var argCount = getEffectiveArgumentCount(node, args, signature);
for (var i = 0; i < argCount; i++) {
var arg = getEffectiveArgument(node, args, i);
if (arg === undefined || arg.kind !== 200) {
var paramType = getTypeAtPosition(signature, i);
var argType = getEffectiveArgumentType(node, i);
if (argType === undefined) {
var mapper = excludeArgument && excludeArgument[i] !== undefined ? identityMapper : context;
argType = checkExpressionWithContextualType(arg, paramType, mapper);
}
inferTypes(context.inferences, argType, paramType);
}
}
if (excludeArgument) {
for (var i = 0; i < argCount; i++) {
if (excludeArgument[i] === false) {
var arg = args[i];
var paramType = getTypeAtPosition(signature, i);
inferTypes(context.inferences, checkExpressionWithContextualType(arg, paramType, context), paramType);
}
}
}
return getInferredTypes(context);
}
function checkTypeArguments(signature, typeArgumentNodes, reportErrors, headMessage) {
var isJavascript = ts.isInJavaScriptFile(signature.declaration);
var typeParameters = signature.typeParameters;
var typeArgumentTypes = fillMissingTypeArguments(ts.map(typeArgumentNodes, getTypeFromTypeNode), typeParameters, getMinTypeArgumentCount(typeParameters), isJavascript);
var mapper;
for (var i = 0; i < typeArgumentNodes.length; i++) {
ts.Debug.assert(typeParameters[i] !== undefined, "Should not call checkTypeArguments with too many type arguments");
var constraint = getConstraintOfTypeParameter(typeParameters[i]);
if (!constraint)
continue;
var errorInfo = reportErrors && headMessage && ts.chainDiagnosticMessages(undefined, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1);
var typeArgumentHeadMessage = headMessage || ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1;
if (!mapper) {
mapper = createTypeMapper(typeParameters, typeArgumentTypes);
}
var typeArgument = typeArgumentTypes[i];
if (!checkTypeAssignableTo(typeArgument, getTypeWithThisArgument(instantiateType(constraint, mapper), typeArgument), reportErrors ? typeArgumentNodes[i] : undefined, typeArgumentHeadMessage, errorInfo)) {
return false;
}
}
return typeArgumentTypes;
}
function checkApplicableSignatureForJsxOpeningLikeElement(node, signature, relation) {
var callIsIncomplete = node.attributes.end === node.end;
if (callIsIncomplete) {
return true;
}
var headMessage = ts.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1;
var paramType = getTypeAtPosition(signature, 0);
var attributesType = checkExpressionWithContextualType(node.attributes, paramType, undefined);
var argProperties = getPropertiesOfType(attributesType);
for (var _i = 0, argProperties_1 = argProperties; _i < argProperties_1.length; _i++) {
var arg = argProperties_1[_i];
if (!getPropertyOfType(paramType, arg.escapedName) && isUnhyphenatedJsxName(arg.escapedName)) {
return false;
}
}
return checkTypeRelatedTo(attributesType, paramType, relation, undefined, headMessage);
}
function checkApplicableSignature(node, args, signature, relation, excludeArgument, reportErrors) {
if (ts.isJsxOpeningLikeElement(node)) {
return checkApplicableSignatureForJsxOpeningLikeElement(node, signature, relation);
}
var thisType = getThisTypeOfSignature(signature);
if (thisType && thisType !== voidType && node.kind !== 182) {
var thisArgumentNode = getThisArgumentOfCall(node);
var thisArgumentType = thisArgumentNode ? checkExpression(thisArgumentNode) : voidType;
var errorNode = reportErrors ? (thisArgumentNode || node) : undefined;
var headMessage_1 = ts.Diagnostics.The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1;
if (!checkTypeRelatedTo(thisArgumentType, getThisTypeOfSignature(signature), relation, errorNode, headMessage_1)) {
return false;
}
}
var headMessage = ts.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1;
var argCount = getEffectiveArgumentCount(node, args, signature);
for (var i = 0; i < argCount; i++) {
var arg = getEffectiveArgument(node, args, i);
if (arg === undefined || arg.kind !== 200) {
var paramType = getTypeAtPosition(signature, i);
var argType = getEffectiveArgumentType(node, i) ||
checkExpressionWithContextualType(arg, paramType, excludeArgument && excludeArgument[i] ? identityMapper : undefined);
var checkArgType = excludeArgument ? getRegularTypeOfObjectLiteral(argType) : argType;
var errorNode = reportErrors ? getEffectiveArgumentErrorNode(node, i, arg) : undefined;
if (!checkTypeRelatedTo(checkArgType, paramType, relation, errorNode, headMessage)) {
return false;
}
}
}
return true;
}
function getThisArgumentOfCall(node) {
if (node.kind === 181) {
var callee = node.expression;
if (callee.kind === 179) {
return callee.expression;
}
else if (callee.kind === 180) {
return callee.expression;
}
}
}
function getEffectiveCallArguments(node) {
if (node.kind === 183) {
var template = node.template;
var args_4 = [undefined];
if (template.kind === 196) {
ts.forEach(template.templateSpans, function (span) {
args_4.push(span.expression);
});
}
return args_4;
}
else if (node.kind === 147) {
return undefined;
}
else if (ts.isJsxOpeningLikeElement(node)) {
return node.attributes.properties.length > 0 ? [node.attributes] : ts.emptyArray;
}
else {
return node.arguments || ts.emptyArray;
}
}
function getEffectiveArgumentCount(node, args, signature) {
if (node.kind === 147) {
switch (node.parent.kind) {
case 229:
case 199:
return 1;
case 149:
return 2;
case 151:
case 153:
case 154:
if (languageVersion === 0) {
return 2;
}
return signature.parameters.length >= 3 ? 3 : 2;
case 146:
return 3;
}
}
else {
return args.length;
}
}
function getEffectiveDecoratorFirstArgumentType(node) {
if (node.kind === 229) {
var classSymbol = getSymbolOfNode(node);
return getTypeOfSymbol(classSymbol);
}
if (node.kind === 146) {
node = node.parent;
if (node.kind === 152) {
var classSymbol = getSymbolOfNode(node);
return getTypeOfSymbol(classSymbol);
}
}
if (node.kind === 149 ||
node.kind === 151 ||
node.kind === 153 ||
node.kind === 154) {
return getParentTypeOfClassElement(node);
}
ts.Debug.fail("Unsupported decorator target.");
return unknownType;
}
function getEffectiveDecoratorSecondArgumentType(node) {
if (node.kind === 229) {
ts.Debug.fail("Class decorators should not have a second synthetic argument.");
return unknownType;
}
if (node.kind === 146) {
node = node.parent;
if (node.kind === 152) {
return anyType;
}
}
if (node.kind === 149 ||
node.kind === 151 ||
node.kind === 153 ||
node.kind === 154) {
var element = node;
switch (element.name.kind) {
case 71:
return getLiteralType(ts.idText(element.name));
case 8:
case 9:
return getLiteralType(element.name.text);
case 144:
var nameType = checkComputedPropertyName(element.name);
if (isTypeAssignableToKind(nameType, 512)) {
return nameType;
}
else {
return stringType;
}
default:
ts.Debug.fail("Unsupported property name.");
return unknownType;
}
}
ts.Debug.fail("Unsupported decorator target.");
return unknownType;
}
function getEffectiveDecoratorThirdArgumentType(node) {
if (node.kind === 229) {
ts.Debug.fail("Class decorators should not have a third synthetic argument.");
return unknownType;
}
if (node.kind === 146) {
return numberType;
}
if (node.kind === 149) {
ts.Debug.fail("Property decorators should not have a third synthetic argument.");
return unknownType;
}
if (node.kind === 151 ||
node.kind === 153 ||
node.kind === 154) {
var propertyType = getTypeOfNode(node);
return createTypedPropertyDescriptorType(propertyType);
}
ts.Debug.fail("Unsupported decorator target.");
return unknownType;
}
function getEffectiveDecoratorArgumentType(node, argIndex) {
if (argIndex === 0) {
return getEffectiveDecoratorFirstArgumentType(node.parent);
}
else if (argIndex === 1) {
return getEffectiveDecoratorSecondArgumentType(node.parent);
}
else if (argIndex === 2) {
return getEffectiveDecoratorThirdArgumentType(node.parent);
}
ts.Debug.fail("Decorators should not have a fourth synthetic argument.");
return unknownType;
}
function getEffectiveArgumentType(node, argIndex) {
if (node.kind === 147) {
return getEffectiveDecoratorArgumentType(node, argIndex);
}
else if (argIndex === 0 && node.kind === 183) {
return getGlobalTemplateStringsArrayType();
}
return undefined;
}
function getEffectiveArgument(node, args, argIndex) {
if (node.kind === 147 ||
(argIndex === 0 && node.kind === 183)) {
return undefined;
}
return args[argIndex];
}
function getEffectiveArgumentErrorNode(node, argIndex, arg) {
if (node.kind === 147) {
return node.expression;
}
else if (argIndex === 0 && node.kind === 183) {
return node.template;
}
else {
return arg;
}
}
function resolveCall(node, signatures, candidatesOutArray, fallbackError) {
var isTaggedTemplate = node.kind === 183;
var isDecorator = node.kind === 147;
var isJsxOpeningOrSelfClosingElement = ts.isJsxOpeningLikeElement(node);
var typeArguments;
if (!isTaggedTemplate && !isDecorator && !isJsxOpeningOrSelfClosingElement) {
typeArguments = node.typeArguments;
if (node.expression.kind !== 97) {
ts.forEach(typeArguments, checkSourceElement);
}
}
var candidates = candidatesOutArray || [];
reorderCandidates(signatures, candidates);
if (!candidates.length) {
diagnostics.add(ts.createDiagnosticForNode(node, ts.Diagnostics.Call_target_does_not_contain_any_signatures));
return resolveErrorCall(node);
}
var args = getEffectiveCallArguments(node);
var isSingleNonGenericCandidate = candidates.length === 1 && !candidates[0].typeParameters;
var excludeArgument;
var excludeCount = 0;
if (!isDecorator && !isSingleNonGenericCandidate) {
for (var i = isTaggedTemplate ? 1 : 0; i < args.length; i++) {
if (isContextSensitive(args[i])) {
if (!excludeArgument) {
excludeArgument = new Array(args.length);
}
excludeArgument[i] = true;
excludeCount++;
}
}
}
var candidateForArgumentError;
var candidateForTypeArgumentError;
var result;
var signatureHelpTrailingComma = candidatesOutArray && node.kind === 181 && node.arguments.hasTrailingComma;
if (candidates.length > 1) {
result = chooseOverload(candidates, subtypeRelation, signatureHelpTrailingComma);
}
if (!result) {
result = chooseOverload(candidates, assignableRelation, signatureHelpTrailingComma);
}
if (result) {
return result;
}
if (candidateForArgumentError) {
if (isJsxOpeningOrSelfClosingElement) {
return candidateForArgumentError;
}
checkApplicableSignature(node, args, candidateForArgumentError, assignableRelation, undefined, true);
}
else if (candidateForTypeArgumentError) {
checkTypeArguments(candidateForTypeArgumentError, node.typeArguments, true, fallbackError);
}
else if (typeArguments && ts.every(signatures, function (sig) { return ts.length(sig.typeParameters) !== typeArguments.length; })) {
var min = Number.POSITIVE_INFINITY;
var max = Number.NEGATIVE_INFINITY;
for (var _i = 0, signatures_5 = signatures; _i < signatures_5.length; _i++) {
var sig = signatures_5[_i];
min = Math.min(min, getMinTypeArgumentCount(sig.typeParameters));
max = Math.max(max, ts.length(sig.typeParameters));
}
var paramCount = min < max ? min + "-" + max : min;
diagnostics.add(ts.createDiagnosticForNode(node, ts.Diagnostics.Expected_0_type_arguments_but_got_1, paramCount, typeArguments.length));
}
else if (args) {
var min = Number.POSITIVE_INFINITY;
var max = Number.NEGATIVE_INFINITY;
for (var _a = 0, signatures_6 = signatures; _a < signatures_6.length; _a++) {
var sig = signatures_6[_a];
min = Math.min(min, sig.minArgumentCount);
max = Math.max(max, sig.parameters.length);
}
var hasRestParameter_1 = ts.some(signatures, function (sig) { return sig.hasRestParameter; });
var hasSpreadArgument = getSpreadArgumentIndex(args) > -1;
var paramCount = hasRestParameter_1 ? min :
min < max ? min + "-" + max :
min;
var argCount = args.length - (hasSpreadArgument ? 1 : 0);
var error_1 = hasRestParameter_1 && hasSpreadArgument ? ts.Diagnostics.Expected_at_least_0_arguments_but_got_a_minimum_of_1 :
hasRestParameter_1 ? ts.Diagnostics.Expected_at_least_0_arguments_but_got_1 :
hasSpreadArgument ? ts.Diagnostics.Expected_0_arguments_but_got_a_minimum_of_1 :
ts.Diagnostics.Expected_0_arguments_but_got_1;
diagnostics.add(ts.createDiagnosticForNode(node, error_1, paramCount, argCount));
}
else if (fallbackError) {
diagnostics.add(ts.createDiagnosticForNode(node, fallbackError));
}
if (!produceDiagnostics) {
ts.Debug.assert(candidates.length > 0);
var bestIndex = getLongestCandidateIndex(candidates, apparentArgumentCount === undefined ? args.length : apparentArgumentCount);
var candidate = candidates[bestIndex];
var typeParameters = candidate.typeParameters;
if (typeParameters && callLikeExpressionMayHaveTypeArguments(node) && node.typeArguments) {
var typeArguments_1 = node.typeArguments.map(getTypeOfNode);
while (typeArguments_1.length > typeParameters.length) {
typeArguments_1.pop();
}
while (typeArguments_1.length < typeParameters.length) {
typeArguments_1.push(getDefaultTypeArgumentType(ts.isInJavaScriptFile(node)));
}
var instantiated = createSignatureInstantiation(candidate, typeArguments_1);
candidates[bestIndex] = instantiated;
return instantiated;
}
return candidate;
}
return resolveErrorCall(node);
function chooseOverload(candidates, relation, signatureHelpTrailingComma) {
if (signatureHelpTrailingComma === void 0) { signatureHelpTrailingComma = false; }
candidateForArgumentError = undefined;
candidateForTypeArgumentError = undefined;
if (isSingleNonGenericCandidate) {
var candidate = candidates[0];
if (!hasCorrectArity(node, args, candidate, signatureHelpTrailingComma)) {
return undefined;
}
if (!checkApplicableSignature(node, args, candidate, relation, excludeArgument, false)) {
candidateForArgumentError = candidate;
return undefined;
}
return candidate;
}
for (var candidateIndex = 0; candidateIndex < candidates.length; candidateIndex++) {
var originalCandidate = candidates[candidateIndex];
if (!hasCorrectArity(node, args, originalCandidate, signatureHelpTrailingComma)) {
continue;
}
var candidate = void 0;
var inferenceContext = originalCandidate.typeParameters ?
createInferenceContext(originalCandidate, ts.isInJavaScriptFile(node) ? 4 : 0) :
undefined;
while (true) {
candidate = originalCandidate;
if (candidate.typeParameters) {
var typeArgumentTypes = void 0;
if (typeArguments) {
var typeArgumentResult = checkTypeArguments(candidate, typeArguments, false);
if (typeArgumentResult) {
typeArgumentTypes = typeArgumentResult;
}
else {
candidateForTypeArgumentError = originalCandidate;
break;
}
}
else {
typeArgumentTypes = inferTypeArguments(node, candidate, args, excludeArgument, inferenceContext);
}
var isJavascript = ts.isInJavaScriptFile(candidate.declaration);
candidate = getSignatureInstantiation(candidate, typeArgumentTypes, isJavascript);
}
if (!checkApplicableSignature(node, args, candidate, relation, excludeArgument, false)) {
candidateForArgumentError = candidate;
break;
}
if (excludeCount === 0) {
candidates[candidateIndex] = candidate;
return candidate;
}
excludeCount--;
if (excludeCount > 0) {
excludeArgument[ts.indexOf(excludeArgument, true)] = false;
}
else {
excludeArgument = undefined;
}
}
}
return undefined;
}
}
function getLongestCandidateIndex(candidates, argsCount) {
var maxParamsIndex = -1;
var maxParams = -1;
for (var i = 0; i < candidates.length; i++) {
var candidate = candidates[i];
if (candidate.hasRestParameter || candidate.parameters.length >= argsCount) {
return i;
}
if (candidate.parameters.length > maxParams) {
maxParams = candidate.parameters.length;
maxParamsIndex = i;
}
}
return maxParamsIndex;
}
function resolveCallExpression(node, candidatesOutArray) {
if (node.expression.kind === 97) {
var superType = checkSuperExpression(node.expression);
if (superType !== unknownType) {
var baseTypeNode = ts.getClassExtendsHeritageClauseElement(ts.getContainingClass(node));
if (baseTypeNode) {
var baseConstructors = getInstantiatedConstructorsForTypeArguments(superType, baseTypeNode.typeArguments, baseTypeNode);
return resolveCall(node, baseConstructors, candidatesOutArray);
}
}
return resolveUntypedCall(node);
}
var funcType = checkNonNullExpression(node.expression);
if (funcType === silentNeverType) {
return silentNeverSignature;
}
var apparentType = getApparentType(funcType);
if (apparentType === unknownType) {
return resolveErrorCall(node);
}
var callSignatures = getSignaturesOfType(apparentType, 0);
var constructSignatures = getSignaturesOfType(apparentType, 1);
if (isUntypedFunctionCall(funcType, apparentType, callSignatures.length, constructSignatures.length)) {
if (funcType !== unknownType && node.typeArguments) {
error(node, ts.Diagnostics.Untyped_function_calls_may_not_accept_type_arguments);
}
return resolveUntypedCall(node);
}
if (!callSignatures.length) {
if (constructSignatures.length) {
error(node, ts.Diagnostics.Value_of_type_0_is_not_callable_Did_you_mean_to_include_new, typeToString(funcType));
}
else {
error(node, ts.Diagnostics.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures, typeToString(apparentType));
}
return resolveErrorCall(node);
}
return resolveCall(node, callSignatures, candidatesOutArray);
}
function isUntypedFunctionCall(funcType, apparentFuncType, numCallSignatures, numConstructSignatures) {
if (isTypeAny(funcType)) {
return true;
}
if (isTypeAny(apparentFuncType) && funcType.flags & 16384) {
return true;
}
if (!numCallSignatures && !numConstructSignatures) {
if (funcType.flags & 65536) {
return false;
}
return isTypeAssignableTo(funcType, globalFunctionType);
}
return false;
}
function resolveNewExpression(node, candidatesOutArray) {
if (node.arguments && languageVersion < 1) {
var spreadIndex = getSpreadArgumentIndex(node.arguments);
if (spreadIndex >= 0) {
error(node.arguments[spreadIndex], ts.Diagnostics.Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher);
}
}
var expressionType = checkNonNullExpression(node.expression);
if (expressionType === silentNeverType) {
return silentNeverSignature;
}
expressionType = getApparentType(expressionType);
if (expressionType === unknownType) {
return resolveErrorCall(node);
}
if (isTypeAny(expressionType)) {
if (node.typeArguments) {
error(node, ts.Diagnostics.Untyped_function_calls_may_not_accept_type_arguments);
}
return resolveUntypedCall(node);
}
var constructSignatures = getSignaturesOfType(expressionType, 1);
if (constructSignatures.length) {
if (!isConstructorAccessible(node, constructSignatures[0])) {
return resolveErrorCall(node);
}
var valueDecl = expressionType.symbol && getClassLikeDeclarationOfSymbol(expressionType.symbol);
if (valueDecl && ts.hasModifier(valueDecl, 128)) {
error(node, ts.Diagnostics.Cannot_create_an_instance_of_the_abstract_class_0, ts.declarationNameToString(ts.getNameOfDeclaration(valueDecl)));
return resolveErrorCall(node);
}
return resolveCall(node, constructSignatures, candidatesOutArray);
}
var callSignatures = getSignaturesOfType(expressionType, 0);
if (callSignatures.length) {
var signature = resolveCall(node, callSignatures, candidatesOutArray);
if (!isJavaScriptConstructor(signature.declaration) && getReturnTypeOfSignature(signature) !== voidType) {
error(node, ts.Diagnostics.Only_a_void_function_can_be_called_with_the_new_keyword);
}
if (getThisTypeOfSignature(signature) === voidType) {
error(node, ts.Diagnostics.A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void);
}
return signature;
}
error(node, ts.Diagnostics.Cannot_use_new_with_an_expression_whose_type_lacks_a_call_or_construct_signature);
return resolveErrorCall(node);
}
function isConstructorAccessible(node, signature) {
if (!signature || !signature.declaration) {
return true;
}
var declaration = signature.declaration;
var modifiers = ts.getSelectedModifierFlags(declaration, 24);
if (!modifiers) {
return true;
}
var declaringClassDeclaration = getClassLikeDeclarationOfSymbol(declaration.parent.symbol);
var declaringClass = getDeclaredTypeOfSymbol(declaration.parent.symbol);
if (!isNodeWithinClass(node, declaringClassDeclaration)) {
var containingClass = ts.getContainingClass(node);
if (containingClass) {
var containingType = getTypeOfNode(containingClass);
var baseTypes = getBaseTypes(containingType);
while (baseTypes.length) {
var baseType = baseTypes[0];
if (modifiers & 16 &&
baseType.symbol === declaration.parent.symbol) {
return true;
}
baseTypes = getBaseTypes(baseType);
}
}
if (modifiers & 8) {
error(node, ts.Diagnostics.Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration, typeToString(declaringClass));
}
if (modifiers & 16) {
error(node, ts.Diagnostics.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration, typeToString(declaringClass));
}
return false;
}
return true;
}
function resolveTaggedTemplateExpression(node, candidatesOutArray) {
var tagType = checkExpression(node.tag);
var apparentType = getApparentType(tagType);
if (apparentType === unknownType) {
return resolveErrorCall(node);
}
var callSignatures = getSignaturesOfType(apparentType, 0);
var constructSignatures = getSignaturesOfType(apparentType, 1);
if (isUntypedFunctionCall(tagType, apparentType, callSignatures.length, constructSignatures.length)) {
return resolveUntypedCall(node);
}
if (!callSignatures.length) {
error(node, ts.Diagnostics.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures, typeToString(apparentType));
return resolveErrorCall(node);
}
return resolveCall(node, callSignatures, candidatesOutArray);
}
function getDiagnosticHeadMessageForDecoratorResolution(node) {
switch (node.parent.kind) {
case 229:
case 199:
return ts.Diagnostics.Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression;
case 146:
return ts.Diagnostics.Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression;
case 149:
return ts.Diagnostics.Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression;
case 151:
case 153:
case 154:
return ts.Diagnostics.Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression;
}
}
function resolveDecorator(node, candidatesOutArray) {
var funcType = checkExpression(node.expression);
var apparentType = getApparentType(funcType);
if (apparentType === unknownType) {
return resolveErrorCall(node);
}
var callSignatures = getSignaturesOfType(apparentType, 0);
var constructSignatures = getSignaturesOfType(apparentType, 1);
if (isUntypedFunctionCall(funcType, apparentType, callSignatures.length, constructSignatures.length)) {
return resolveUntypedCall(node);
}
if (isPotentiallyUncalledDecorator(node, callSignatures)) {
var nodeStr = ts.getTextOfNode(node.expression, false);
error(node, ts.Diagnostics._0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write_0, nodeStr);
return resolveErrorCall(node);
}
var headMessage = getDiagnosticHeadMessageForDecoratorResolution(node);
if (!callSignatures.length) {
var errorInfo = void 0;
errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures, typeToString(apparentType));
errorInfo = ts.chainDiagnosticMessages(errorInfo, headMessage);
diagnostics.add(ts.createDiagnosticForNodeFromMessageChain(node, errorInfo));
return resolveErrorCall(node);
}
return resolveCall(node, callSignatures, candidatesOutArray, headMessage);
}
function isPotentiallyUncalledDecorator(decorator, signatures) {
return signatures.length && ts.every(signatures, function (signature) {
return signature.minArgumentCount === 0 &&
!signature.hasRestParameter &&
signature.parameters.length < getEffectiveArgumentCount(decorator, undefined, signature);
});
}
function getResolvedJsxStatelessFunctionSignature(openingLikeElement, elementType, candidatesOutArray) {
ts.Debug.assert(!(elementType.flags & 65536));
return resolveStatelessJsxOpeningLikeElement(openingLikeElement, elementType, candidatesOutArray);
}
function resolveStatelessJsxOpeningLikeElement(openingLikeElement, elementType, candidatesOutArray) {
if (elementType.flags & 65536) {
var types = elementType.types;
var result = void 0;
for (var _i = 0, types_17 = types; _i < types_17.length; _i++) {
var type = types_17[_i];
result = result || resolveStatelessJsxOpeningLikeElement(openingLikeElement, type, candidatesOutArray);
}
return result;
}
var callSignatures = elementType && getSignaturesOfType(elementType, 0);
if (callSignatures && callSignatures.length > 0) {
return resolveCall(openingLikeElement, callSignatures, candidatesOutArray);
}
return undefined;
}
function resolveSignature(node, candidatesOutArray) {
switch (node.kind) {
case 181:
return resolveCallExpression(node, candidatesOutArray);
case 182:
return resolveNewExpression(node, candidatesOutArray);
case 183:
return resolveTaggedTemplateExpression(node, candidatesOutArray);
case 147:
return resolveDecorator(node, candidatesOutArray);
case 251:
case 250:
return resolveStatelessJsxOpeningLikeElement(node, checkExpression(node.tagName), candidatesOutArray) || unknownSignature;
}
ts.Debug.assertNever(node, "Branch in 'resolveSignature' should be unreachable.");
}
function getResolvedSignature(node, candidatesOutArray) {
var links = getNodeLinks(node);
var cached = links.resolvedSignature;
if (cached && cached !== resolvingSignature && !candidatesOutArray) {
return cached;
}
links.resolvedSignature = resolvingSignature;
var result = resolveSignature(node, candidatesOutArray);
links.resolvedSignature = flowLoopStart === flowLoopCount ? result : cached;
return result;
}
function isJavaScriptConstructor(node) {
if (node && ts.isInJavaScriptFile(node)) {
if (ts.getJSDocClassTag(node))
return true;
var symbol = ts.isFunctionDeclaration(node) || ts.isFunctionExpression(node) ? getSymbolOfNode(node) :
ts.isVariableDeclaration(node) && node.initializer && ts.isFunctionExpression(node.initializer) ? getSymbolOfNode(node.initializer) :
undefined;
return symbol && symbol.members !== undefined;
}
return false;
}
function getJavaScriptClassType(symbol) {
if (ts.isDeclarationOfFunctionOrClassExpression(symbol)) {
symbol = getSymbolOfNode(symbol.valueDeclaration.initializer);
}
if (isJavaScriptConstructor(symbol.valueDeclaration)) {
return getInferredClassType(symbol);
}
if (symbol.flags & 3) {
var valueType = getTypeOfSymbol(symbol);
if (valueType.symbol && !isInferredClassType(valueType) && isJavaScriptConstructor(valueType.symbol.valueDeclaration)) {
return getInferredClassType(valueType.symbol);
}
}
}
function getInferredClassType(symbol) {
var links = getSymbolLinks(symbol);
if (!links.inferredClassType) {
links.inferredClassType = createAnonymousType(symbol, symbol.members || emptySymbols, ts.emptyArray, ts.emptyArray, undefined, undefined);
}
return links.inferredClassType;
}
function isInferredClassType(type) {
return type.symbol
&& getObjectFlags(type) & 16
&& getSymbolLinks(type.symbol).inferredClassType === type;
}
function checkCallExpression(node) {
checkGrammarTypeArguments(node, node.typeArguments) || checkGrammarArguments(node.arguments);
var signature = getResolvedSignature(node);
if (node.expression.kind === 97) {
return voidType;
}
if (node.kind === 182) {
var declaration = signature.declaration;
if (declaration &&
declaration.kind !== 152 &&
declaration.kind !== 156 &&
declaration.kind !== 161 &&
!ts.isJSDocConstructSignature(declaration)) {
var funcSymbol = checkExpression(node.expression).symbol;
if (!funcSymbol && node.expression.kind === 71) {
funcSymbol = getResolvedSymbol(node.expression);
}
var type = funcSymbol && getJavaScriptClassType(funcSymbol);
if (type) {
return type;
}
if (noImplicitAny) {
error(node, ts.Diagnostics.new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type);
}
return anyType;
}
}
if (ts.isInJavaScriptFile(node) && isCommonJsRequire(node)) {
return resolveExternalModuleTypeByLiteral(node.arguments[0]);
}
return getReturnTypeOfSignature(signature);
}
function checkImportCallExpression(node) {
checkGrammarArguments(node.arguments) || checkGrammarImportCallExpression(node);
if (node.arguments.length === 0) {
return createPromiseReturnType(node, anyType);
}
var specifier = node.arguments[0];
var specifierType = checkExpressionCached(specifier);
for (var i = 1; i < node.arguments.length; ++i) {
checkExpressionCached(node.arguments[i]);
}
if (specifierType.flags & 2048 || specifierType.flags & 4096 || !isTypeAssignableTo(specifierType, stringType)) {
error(specifier, ts.Diagnostics.Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0, typeToString(specifierType));
}
var moduleSymbol = resolveExternalModuleName(node, specifier);
if (moduleSymbol) {
var esModuleSymbol = resolveESModuleSymbol(moduleSymbol, specifier, true);
if (esModuleSymbol) {
return createPromiseReturnType(node, getTypeWithSyntheticDefaultImportType(getTypeOfSymbol(esModuleSymbol), esModuleSymbol));
}
}
return createPromiseReturnType(node, anyType);
}
function getTypeWithSyntheticDefaultImportType(type, symbol) {
if (allowSyntheticDefaultImports && type && type !== unknownType) {
var synthType = type;
if (!synthType.syntheticType) {
if (!getPropertyOfType(type, "default")) {
var memberTable = ts.createSymbolTable();
var newSymbol = createSymbol(2097152, "default");
newSymbol.target = resolveSymbol(symbol);
memberTable.set("default", newSymbol);
var anonymousSymbol = createSymbol(2048, "__type");
var defaultContainingObject = createAnonymousType(anonymousSymbol, memberTable, ts.emptyArray, ts.emptyArray, undefined, undefined);
anonymousSymbol.type = defaultContainingObject;
synthType.syntheticType = getIntersectionType([type, defaultContainingObject]);
}
else {
synthType.syntheticType = type;
}
}
return synthType.syntheticType;
}
return type;
}
function isCommonJsRequire(node) {
if (!ts.isRequireCall(node, true)) {
return false;
}
if (!ts.isIdentifier(node.expression))
throw ts.Debug.fail();
var resolvedRequire = resolveName(node.expression, node.expression.escapedText, 107455, undefined, undefined, true);
if (!resolvedRequire) {
return true;
}
if (resolvedRequire.flags & 2097152) {
return false;
}
var targetDeclarationKind = resolvedRequire.flags & 16
? 228
: resolvedRequire.flags & 3
? 226
: 0;
if (targetDeclarationKind !== 0) {
var decl = ts.getDeclarationOfKind(resolvedRequire, targetDeclarationKind);
return ts.isInAmbientContext(decl);
}
return false;
}
function checkTaggedTemplateExpression(node) {
if (languageVersion < 2) {
checkExternalEmitHelpers(node, 65536);
}
return getReturnTypeOfSignature(getResolvedSignature(node));
}
function checkAssertion(node) {
return checkAssertionWorker(node, node.type, node.expression);
}
function checkAssertionWorker(errNode, type, expression, checkMode) {
var exprType = getRegularTypeOfObjectLiteral(getBaseTypeOfLiteralType(checkExpression(expression, checkMode)));
checkSourceElement(type);
var targetType = getTypeFromTypeNode(type);
if (produceDiagnostics && targetType !== unknownType) {
var widenedType = getWidenedType(exprType);
if (!isTypeComparableTo(targetType, widenedType)) {
checkTypeComparableTo(exprType, targetType, errNode, ts.Diagnostics.Type_0_cannot_be_converted_to_type_1);
}
}
return targetType;
}
function checkNonNullAssertion(node) {
return getNonNullableType(checkExpression(node.expression));
}
function checkMetaProperty(node) {
checkGrammarMetaProperty(node);
var container = ts.getNewTargetContainer(node);
if (!container) {
error(node, ts.Diagnostics.Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constructor, "new.target");
return unknownType;
}
else if (container.kind === 152) {
var symbol = getSymbolOfNode(container.parent);
return getTypeOfSymbol(symbol);
}
else {
var symbol = getSymbolOfNode(container);
return getTypeOfSymbol(symbol);
}
}
function getTypeOfParameter(symbol) {
var type = getTypeOfSymbol(symbol);
if (strictNullChecks) {
var declaration = symbol.valueDeclaration;
if (declaration && declaration.initializer) {
return getNullableType(type, 2048);
}
}
return type;
}
function getTypeAtPosition(signature, pos) {
return signature.hasRestParameter ?
pos < signature.parameters.length - 1 ? getTypeOfParameter(signature.parameters[pos]) : getRestTypeOfSignature(signature) :
pos < signature.parameters.length ? getTypeOfParameter(signature.parameters[pos]) : anyType;
}
function getTypeOfFirstParameterOfSignature(signature) {
return signature.parameters.length > 0 ? getTypeAtPosition(signature, 0) : neverType;
}
function inferFromAnnotatedParameters(signature, context, mapper) {
var len = signature.parameters.length - (signature.hasRestParameter ? 1 : 0);
for (var i = 0; i < len; i++) {
var declaration = signature.parameters[i].valueDeclaration;
if (declaration.type) {
var typeNode = ts.getEffectiveTypeAnnotationNode(declaration);
if (typeNode) {
inferTypes(mapper.inferences, getTypeFromTypeNode(typeNode), getTypeAtPosition(context, i));
}
}
}
}
function assignContextualParameterTypes(signature, context) {
signature.typeParameters = context.typeParameters;
if (context.thisParameter) {
var parameter = signature.thisParameter;
if (!parameter || parameter.valueDeclaration && !parameter.valueDeclaration.type) {
if (!parameter) {
signature.thisParameter = createSymbolWithType(context.thisParameter, undefined);
}
assignTypeToParameterAndFixTypeParameters(signature.thisParameter, getTypeOfSymbol(context.thisParameter));
}
}
var len = signature.parameters.length - (signature.hasRestParameter ? 1 : 0);
for (var i = 0; i < len; i++) {
var parameter = signature.parameters[i];
if (!ts.getEffectiveTypeAnnotationNode(parameter.valueDeclaration)) {
var contextualParameterType = getTypeAtPosition(context, i);
assignTypeToParameterAndFixTypeParameters(parameter, contextualParameterType);
}
}
if (signature.hasRestParameter && isRestParameterIndex(context, signature.parameters.length - 1)) {
var parameter = ts.lastOrUndefined(signature.parameters);
if (isTransientSymbol(parameter) || !ts.getEffectiveTypeAnnotationNode(parameter.valueDeclaration)) {
var contextualParameterType = getTypeOfSymbol(ts.lastOrUndefined(context.parameters));
assignTypeToParameterAndFixTypeParameters(parameter, contextualParameterType);
}
}
}
function assignBindingElementTypes(pattern) {
for (var _i = 0, _a = pattern.elements; _i < _a.length; _i++) {
var element = _a[_i];
if (!ts.isOmittedExpression(element)) {
if (element.name.kind === 71) {
getSymbolLinks(getSymbolOfNode(element)).type = getTypeForBindingElement(element);
}
else {
assignBindingElementTypes(element.name);
}
}
}
}
function assignTypeToParameterAndFixTypeParameters(parameter, contextualType) {
var links = getSymbolLinks(parameter);
if (!links.type) {
links.type = contextualType;
var decl = parameter.valueDeclaration;
if (decl.name.kind !== 71) {
if (links.type === emptyObjectType) {
links.type = getTypeFromBindingPattern(decl.name);
}
assignBindingElementTypes(decl.name);
}
}
}
function createPromiseType(promisedType) {
var globalPromiseType = getGlobalPromiseType(true);
if (globalPromiseType !== emptyGenericType) {
promisedType = getAwaitedType(promisedType) || emptyObjectType;
return createTypeReference(globalPromiseType, [promisedType]);
}
return emptyObjectType;
}
function createPromiseReturnType(func, promisedType) {
var promiseType = createPromiseType(promisedType);
if (promiseType === emptyObjectType) {
error(func, ts.isImportCall(func) ?
ts.Diagnostics.A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES2015_in_your_lib_option :
ts.Diagnostics.An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES2015_in_your_lib_option);
return unknownType;
}
else if (!getGlobalPromiseConstructorSymbol(true)) {
error(func, ts.isImportCall(func) ?
ts.Diagnostics.A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option :
ts.Diagnostics.An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option);
}
return promiseType;
}
function getReturnTypeFromBody(func, checkMode) {
var contextualSignature = getContextualSignatureForFunctionLikeDeclaration(func);
if (!func.body) {
return unknownType;
}
var functionFlags = ts.getFunctionFlags(func);
var type;
if (func.body.kind !== 207) {
type = checkExpressionCached(func.body, checkMode);
if (functionFlags & 2) {
type = checkAwaitedType(type, func, ts.Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member);
}
}
else {
var types = void 0;
if (functionFlags & 1) {
types = ts.concatenate(checkAndAggregateYieldOperandTypes(func, checkMode), checkAndAggregateReturnExpressionTypes(func, checkMode));
if (!types || types.length === 0) {
var iterableIteratorAny = functionFlags & 2
? createAsyncIterableIteratorType(anyType)
: createIterableIteratorType(anyType);
if (noImplicitAny) {
error(func.asteriskToken, ts.Diagnostics.Generator_implicitly_has_type_0_because_it_does_not_yield_any_values_Consider_supplying_a_return_type, typeToString(iterableIteratorAny));
}
return iterableIteratorAny;
}
}
else {
types = checkAndAggregateReturnExpressionTypes(func, checkMode);
if (!types) {
return functionFlags & 2
? createPromiseReturnType(func, neverType)
: neverType;
}
if (types.length === 0) {
return functionFlags & 2
? createPromiseReturnType(func, voidType)
: voidType;
}
}
type = getUnionType(types, true);
if (functionFlags & 1) {
type = functionFlags & 2
? createAsyncIterableIteratorType(type)
: createIterableIteratorType(type);
}
}
if (!contextualSignature) {
reportErrorsFromWidening(func, type);
}
if (isUnitType(type) &&
!(contextualSignature &&
isLiteralContextualType(contextualSignature === getSignatureFromDeclaration(func) ? type : getReturnTypeOfSignature(contextualSignature)))) {
type = getWidenedLiteralType(type);
}
var widenedType = getWidenedType(type);
return (functionFlags & 3) === 2
? createPromiseReturnType(func, widenedType)
: widenedType;
}
function checkAndAggregateYieldOperandTypes(func, checkMode) {
var aggregatedTypes = [];
var functionFlags = ts.getFunctionFlags(func);
ts.forEachYieldExpression(func.body, function (yieldExpression) {
var expr = yieldExpression.expression;
if (expr) {
var type = checkExpressionCached(expr, checkMode);
if (yieldExpression.asteriskToken) {
type = checkIteratedTypeOrElementType(type, yieldExpression.expression, false, (functionFlags & 2) !== 0);
}
if (functionFlags & 2) {
type = checkAwaitedType(type, expr, yieldExpression.asteriskToken
? ts.Diagnostics.Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member
: ts.Diagnostics.Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member);
}
ts.pushIfUnique(aggregatedTypes, type);
}
});
return aggregatedTypes;
}
function isExhaustiveSwitchStatement(node) {
if (!node.possiblyExhaustive) {
return false;
}
var type = getTypeOfExpression(node.expression);
if (!isLiteralType(type)) {
return false;
}
var switchTypes = getSwitchClauseTypes(node);
if (!switchTypes.length) {
return false;
}
return eachTypeContainedIn(mapType(type, getRegularTypeOfLiteralType), switchTypes);
}
function functionHasImplicitReturn(func) {
if (!(func.flags & 128)) {
return false;
}
var lastStatement = ts.lastOrUndefined(func.body.statements);
if (lastStatement && lastStatement.kind === 221 && isExhaustiveSwitchStatement(lastStatement)) {
return false;
}
return true;
}
function checkAndAggregateReturnExpressionTypes(func, checkMode) {
var functionFlags = ts.getFunctionFlags(func);
var aggregatedTypes = [];
var hasReturnWithNoExpression = functionHasImplicitReturn(func);
var hasReturnOfTypeNever = false;
ts.forEachReturnStatement(func.body, function (returnStatement) {
var expr = returnStatement.expression;
if (expr) {
var type = checkExpressionCached(expr, checkMode);
if (functionFlags & 2) {
type = checkAwaitedType(type, func, ts.Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member);
}
if (type.flags & 8192) {
hasReturnOfTypeNever = true;
}
ts.pushIfUnique(aggregatedTypes, type);
}
else {
hasReturnWithNoExpression = true;
}
});
if (aggregatedTypes.length === 0 && !hasReturnWithNoExpression && (hasReturnOfTypeNever ||
func.kind === 186 || func.kind === 187)) {
return undefined;
}
if (strictNullChecks && aggregatedTypes.length && hasReturnWithNoExpression) {
ts.pushIfUnique(aggregatedTypes, undefinedType);
}
return aggregatedTypes;
}
function checkAllCodePathsInNonVoidFunctionReturnOrThrow(func, returnType) {
if (!produceDiagnostics) {
return;
}
if (returnType && maybeTypeOfKind(returnType, 1 | 1024)) {
return;
}
if (ts.nodeIsMissing(func.body) || func.body.kind !== 207 || !functionHasImplicitReturn(func)) {
return;
}
var hasExplicitReturn = func.flags & 256;
if (returnType && returnType.flags & 8192) {
error(ts.getEffectiveReturnTypeNode(func), ts.Diagnostics.A_function_returning_never_cannot_have_a_reachable_end_point);
}
else if (returnType && !hasExplicitReturn) {
error(ts.getEffectiveReturnTypeNode(func), ts.Diagnostics.A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value);
}
else if (returnType && strictNullChecks && !isTypeAssignableTo(undefinedType, returnType)) {
error(ts.getEffectiveReturnTypeNode(func), ts.Diagnostics.Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined);
}
else if (compilerOptions.noImplicitReturns) {
if (!returnType) {
if (!hasExplicitReturn) {
return;
}
var inferredReturnType = getReturnTypeOfSignature(getSignatureFromDeclaration(func));
if (isUnwrappedReturnTypeVoidOrAny(func, inferredReturnType)) {
return;
}
}
error(ts.getEffectiveReturnTypeNode(func) || func, ts.Diagnostics.Not_all_code_paths_return_a_value);
}
}
function checkFunctionExpressionOrObjectLiteralMethod(node, checkMode) {
ts.Debug.assert(node.kind !== 151 || ts.isObjectLiteralMethod(node));
if (checkMode === 1 && isContextSensitive(node)) {
checkNodeDeferred(node);
return anyFunctionType;
}
var hasGrammarError = checkGrammarFunctionLikeDeclaration(node);
if (!hasGrammarError && node.kind === 186) {
checkGrammarForGenerator(node);
}
var links = getNodeLinks(node);
var type = getTypeOfSymbol(node.symbol);
if (!(links.flags & 1024)) {
var contextualSignature = getContextualSignature(node);
if (!(links.flags & 1024)) {
links.flags |= 1024;
if (contextualSignature) {
var signature = getSignaturesOfType(type, 0)[0];
if (isContextSensitive(node)) {
var contextualMapper = getContextualMapper(node);
if (checkMode === 2) {
inferFromAnnotatedParameters(signature, contextualSignature, contextualMapper);
}
var instantiatedContextualSignature = contextualMapper === identityMapper ?
contextualSignature : instantiateSignature(contextualSignature, contextualMapper);
assignContextualParameterTypes(signature, instantiatedContextualSignature);
}
if (!ts.getEffectiveReturnTypeNode(node) && !signature.resolvedReturnType) {
var returnType = getReturnTypeFromBody(node, checkMode);
if (!signature.resolvedReturnType) {
signature.resolvedReturnType = returnType;
}
}
}
checkSignatureDeclaration(node);
checkNodeDeferred(node);
}
}
if (produceDiagnostics && node.kind !== 151) {
checkCollisionWithCapturedSuperVariable(node, node.name);
checkCollisionWithCapturedThisVariable(node, node.name);
checkCollisionWithCapturedNewTargetVariable(node, node.name);
}
return type;
}
function checkFunctionExpressionOrObjectLiteralMethodDeferred(node) {
ts.Debug.assert(node.kind !== 151 || ts.isObjectLiteralMethod(node));
var functionFlags = ts.getFunctionFlags(node);
var returnTypeNode = ts.getEffectiveReturnTypeNode(node);
var returnOrPromisedType = returnTypeNode &&
((functionFlags & 3) === 2 ?
checkAsyncFunctionReturnType(node) :
getTypeFromTypeNode(returnTypeNode));
if ((functionFlags & 1) === 0) {
checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, returnOrPromisedType);
}
if (node.body) {
if (!returnTypeNode) {
getReturnTypeOfSignature(getSignatureFromDeclaration(node));
}
if (node.body.kind === 207) {
checkSourceElement(node.body);
}
else {
var exprType = checkExpression(node.body);
if (returnOrPromisedType) {
if ((functionFlags & 3) === 2) {
var awaitedType = checkAwaitedType(exprType, node.body, ts.Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member);
checkTypeAssignableTo(awaitedType, returnOrPromisedType, node.body);
}
else {
checkTypeAssignableTo(exprType, returnOrPromisedType, node.body);
}
}
}
registerForUnusedIdentifiersCheck(node);
}
}
function checkArithmeticOperandType(operand, type, diagnostic) {
if (!isTypeAssignableToKind(type, 84)) {
error(operand, diagnostic);
return false;
}
return true;
}
function isReadonlySymbol(symbol) {
return !!(ts.getCheckFlags(symbol) & 8 ||
symbol.flags & 4 && ts.getDeclarationModifierFlagsFromSymbol(symbol) & 64 ||
symbol.flags & 3 && getDeclarationNodeFlagsFromSymbol(symbol) & 2 ||
symbol.flags & 98304 && !(symbol.flags & 65536) ||
symbol.flags & 8);
}
function isReferenceToReadonlyEntity(expr, symbol) {
if (isReadonlySymbol(symbol)) {
if (symbol.flags & 4 &&
(expr.kind === 179 || expr.kind === 180) &&
expr.expression.kind === 99) {
var func = ts.getContainingFunction(expr);
if (!(func && func.kind === 152)) {
return true;
}
return !(func.parent === symbol.valueDeclaration.parent || func === symbol.valueDeclaration.parent);
}
return true;
}
return false;
}
function isReferenceThroughNamespaceImport(expr) {
if (expr.kind === 179 || expr.kind === 180) {
var node = ts.skipParentheses(expr.expression);
if (node.kind === 71) {
var symbol = getNodeLinks(node).resolvedSymbol;
if (symbol.flags & 2097152) {
var declaration = getDeclarationOfAliasSymbol(symbol);
return declaration && declaration.kind === 240;
}
}
}
return false;
}
function checkReferenceExpression(expr, invalidReferenceMessage) {
var node = ts.skipOuterExpressions(expr, 2 | 1);
if (node.kind !== 71 && node.kind !== 179 && node.kind !== 180) {
error(expr, invalidReferenceMessage);
return false;
}
return true;
}
function checkDeleteExpression(node) {
checkExpression(node.expression);
var expr = ts.skipParentheses(node.expression);
if (expr.kind !== 179 && expr.kind !== 180) {
error(expr, ts.Diagnostics.The_operand_of_a_delete_operator_must_be_a_property_reference);
return booleanType;
}
var links = getNodeLinks(expr);
var symbol = getExportSymbolOfValueSymbolIfExported(links.resolvedSymbol);
if (symbol && isReadonlySymbol(symbol)) {
error(expr, ts.Diagnostics.The_operand_of_a_delete_operator_cannot_be_a_read_only_property);
}
return booleanType;
}
function checkTypeOfExpression(node) {
checkExpression(node.expression);
return typeofType;
}
function checkVoidExpression(node) {
checkExpression(node.expression);
return undefinedWideningType;
}
function checkAwaitExpression(node) {
if (produceDiagnostics) {
if (!(node.flags & 16384)) {
grammarErrorOnFirstToken(node, ts.Diagnostics.await_expression_is_only_allowed_within_an_async_function);
}
if (isInParameterInitializerBeforeContainingFunction(node)) {
error(node, ts.Diagnostics.await_expressions_cannot_be_used_in_a_parameter_initializer);
}
}
var operandType = checkExpression(node.expression);
return checkAwaitedType(operandType, node, ts.Diagnostics.Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member);
}
function checkPrefixUnaryExpression(node) {
var operandType = checkExpression(node.operand);
if (operandType === silentNeverType) {
return silentNeverType;
}
if (node.operand.kind === 8) {
if (node.operator === 38) {
return getFreshTypeOfLiteralType(getLiteralType(-node.operand.text));
}
else if (node.operator === 37) {
return getFreshTypeOfLiteralType(getLiteralType(+node.operand.text));
}
}
switch (node.operator) {
case 37:
case 38:
case 52:
checkNonNullType(operandType, node.operand);
if (maybeTypeOfKind(operandType, 512)) {
error(node.operand, ts.Diagnostics.The_0_operator_cannot_be_applied_to_type_symbol, ts.tokenToString(node.operator));
}
return numberType;
case 51:
var facts = getTypeFacts(operandType) & (1048576 | 2097152);
return facts === 1048576 ? falseType :
facts === 2097152 ? trueType :
booleanType;
case 43:
case 44:
var ok = checkArithmeticOperandType(node.operand, checkNonNullType(operandType, node.operand), ts.Diagnostics.An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type);
if (ok) {
checkReferenceExpression(node.operand, ts.Diagnostics.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access);
}
return numberType;
}
return unknownType;
}
function checkPostfixUnaryExpression(node) {
var operandType = checkExpression(node.operand);
if (operandType === silentNeverType) {
return silentNeverType;
}
var ok = checkArithmeticOperandType(node.operand, checkNonNullType(operandType, node.operand), ts.Diagnostics.An_arithmetic_operand_must_be_of_type_any_number_or_an_enum_type);
if (ok) {
checkReferenceExpression(node.operand, ts.Diagnostics.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access);
}
return numberType;
}
function maybeTypeOfKind(type, kind) {
if (type.flags & kind) {
return true;
}
if (type.flags & 196608) {
var types = type.types;
for (var _i = 0, types_18 = types; _i < types_18.length; _i++) {
var t = types_18[_i];
if (maybeTypeOfKind(t, kind)) {
return true;
}
}
}
return false;
}
function isTypeAssignableToKind(source, kind, strict) {
if (source.flags & kind) {
return true;
}
if (strict && source.flags & (1 | 1024 | 2048 | 4096)) {
return false;
}
return (kind & 84 && isTypeAssignableTo(source, numberType)) ||
(kind & 262178 && isTypeAssignableTo(source, stringType)) ||
(kind & 136 && isTypeAssignableTo(source, booleanType)) ||
(kind & 1024 && isTypeAssignableTo(source, voidType)) ||
(kind & 8192 && isTypeAssignableTo(source, neverType)) ||
(kind & 4096 && isTypeAssignableTo(source, nullType)) ||
(kind & 2048 && isTypeAssignableTo(source, undefinedType)) ||
(kind & 512 && isTypeAssignableTo(source, esSymbolType)) ||
(kind & 16777216 && isTypeAssignableTo(source, nonPrimitiveType));
}
function isConstEnumObjectType(type) {
return getObjectFlags(type) & 16 && type.symbol && isConstEnumSymbol(type.symbol);
}
function isConstEnumSymbol(symbol) {
return (symbol.flags & 128) !== 0;
}
function checkInstanceOfExpression(left, right, leftType, rightType) {
if (leftType === silentNeverType || rightType === silentNeverType) {
return silentNeverType;
}
if (!isTypeAny(leftType) && isTypeAssignableToKind(leftType, 8190)) {
error(left, ts.Diagnostics.The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter);
}
if (!(isTypeAny(rightType) ||
getSignaturesOfType(rightType, 0).length ||
getSignaturesOfType(rightType, 1).length ||
isTypeSubtypeOf(rightType, globalFunctionType))) {
error(right, ts.Diagnostics.The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type);
}
return booleanType;
}
function checkInExpression(left, right, leftType, rightType) {
if (leftType === silentNeverType || rightType === silentNeverType) {
return silentNeverType;
}
leftType = checkNonNullType(leftType, left);
rightType = checkNonNullType(rightType, right);
if (!(isTypeComparableTo(leftType, stringType) || isTypeAssignableToKind(leftType, 84 | 512))) {
error(left, ts.Diagnostics.The_left_hand_side_of_an_in_expression_must_be_of_type_any_string_number_or_symbol);
}
if (!isTypeAssignableToKind(rightType, 16777216 | 540672)) {
error(right, ts.Diagnostics.The_right_hand_side_of_an_in_expression_must_be_of_type_any_an_object_type_or_a_type_parameter);
}
return booleanType;
}
function checkObjectLiteralAssignment(node, sourceType) {
var properties = node.properties;
for (var _i = 0, properties_7 = properties; _i < properties_7.length; _i++) {
var p = properties_7[_i];
checkObjectLiteralDestructuringPropertyAssignment(sourceType, p, properties);
}
return sourceType;
}
function checkObjectLiteralDestructuringPropertyAssignment(objectLiteralType, property, allProperties) {
if (property.kind === 261 || property.kind === 262) {
var name = property.name;
if (name.kind === 144) {
checkComputedPropertyName(name);
}
if (isComputedNonLiteralName(name)) {
return undefined;
}
var text = ts.getTextOfPropertyName(name);
var type = isTypeAny(objectLiteralType)
? objectLiteralType
: getTypeOfPropertyOfType(objectLiteralType, text) ||
isNumericLiteralName(text) && getIndexTypeOfType(objectLiteralType, 1) ||
getIndexTypeOfType(objectLiteralType, 0);
if (type) {
if (property.kind === 262) {
return checkDestructuringAssignment(property, type);
}
else {
return checkDestructuringAssignment(property.initializer, type);
}
}
else {
error(name, ts.Diagnostics.Type_0_has_no_property_1_and_no_string_index_signature, typeToString(objectLiteralType), ts.declarationNameToString(name));
}
}
else if (property.kind === 263) {
if (languageVersion < 5) {
checkExternalEmitHelpers(property, 4);
}
var nonRestNames = [];
if (allProperties) {
for (var i = 0; i < allProperties.length - 1; i++) {
nonRestNames.push(allProperties[i].name);
}
}
var type = getRestType(objectLiteralType, nonRestNames, objectLiteralType.symbol);
return checkDestructuringAssignment(property.expression, type);
}
else {
error(property, ts.Diagnostics.Property_assignment_expected);
}
}
function checkArrayLiteralAssignment(node, sourceType, checkMode) {
if (languageVersion < 2 && compilerOptions.downlevelIteration) {
checkExternalEmitHelpers(node, 512);
}
var elementType = checkIteratedTypeOrElementType(sourceType, node, false, false) || unknownType;
var elements = node.elements;
for (var i = 0; i < elements.length; i++) {
checkArrayLiteralDestructuringElementAssignment(node, sourceType, i, elementType, checkMode);
}
return sourceType;
}
function checkArrayLiteralDestructuringElementAssignment(node, sourceType, elementIndex, elementType, checkMode) {
var elements = node.elements;
var element = elements[elementIndex];
if (element.kind !== 200) {
if (element.kind !== 198) {
var propName = "" + elementIndex;
var type = isTypeAny(sourceType)
? sourceType
: isTupleLikeType(sourceType)
? getTypeOfPropertyOfType(sourceType, propName)
: elementType;
if (type) {
return checkDestructuringAssignment(element, type, checkMode);
}
else {
checkExpression(element);
if (isTupleType(sourceType)) {
error(element, ts.Diagnostics.Tuple_type_0_with_length_1_cannot_be_assigned_to_tuple_with_length_2, typeToString(sourceType), getTypeReferenceArity(sourceType), elements.length);
}
else {
error(element, ts.Diagnostics.Type_0_has_no_property_1, typeToString(sourceType), propName);
}
}
}
else {
if (elementIndex < elements.length - 1) {
error(element, ts.Diagnostics.A_rest_element_must_be_last_in_a_destructuring_pattern);
}
else {
var restExpression = element.expression;
if (restExpression.kind === 194 && restExpression.operatorToken.kind === 58) {
error(restExpression.operatorToken, ts.Diagnostics.A_rest_element_cannot_have_an_initializer);
}
else {
return checkDestructuringAssignment(restExpression, createArrayType(elementType), checkMode);
}
}
}
}
return undefined;
}
function checkDestructuringAssignment(exprOrAssignment, sourceType, checkMode) {
var target;
if (exprOrAssignment.kind === 262) {
var prop = exprOrAssignment;
if (prop.objectAssignmentInitializer) {
if (strictNullChecks &&
!(getFalsyFlags(checkExpression(prop.objectAssignmentInitializer)) & 2048)) {
sourceType = getTypeWithFacts(sourceType, 131072);
}
checkBinaryLikeExpression(prop.name, prop.equalsToken, prop.objectAssignmentInitializer, checkMode);
}
target = exprOrAssignment.name;
}
else {
target = exprOrAssignment;
}
if (target.kind === 194 && target.operatorToken.kind === 58) {
checkBinaryExpression(target, checkMode);
target = target.left;
}
if (target.kind === 178) {
return checkObjectLiteralAssignment(target, sourceType);
}
if (target.kind === 177) {
return checkArrayLiteralAssignment(target, sourceType, checkMode);
}
return checkReferenceAssignment(target, sourceType, checkMode);
}
function checkReferenceAssignment(target, sourceType, checkMode) {
var targetType = checkExpression(target, checkMode);
var error = target.parent.kind === 263 ?
ts.Diagnostics.The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access :
ts.Diagnostics.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access;
if (checkReferenceExpression(target, error)) {
checkTypeAssignableTo(sourceType, targetType, target, undefined);
}
return sourceType;
}
function isSideEffectFree(node) {
node = ts.skipParentheses(node);
switch (node.kind) {
case 71:
case 9:
case 12:
case 183:
case 196:
case 13:
case 8:
case 101:
case 86:
case 95:
case 139:
case 186:
case 199:
case 187:
case 177:
case 178:
case 189:
case 203:
case 250:
case 249:
return true;
case 195:
return isSideEffectFree(node.whenTrue) &&
isSideEffectFree(node.whenFalse);
case 194:
if (ts.isAssignmentOperator(node.operatorToken.kind)) {
return false;
}
return isSideEffectFree(node.left) &&
isSideEffectFree(node.right);
case 192:
case 193:
switch (node.operator) {
case 51:
case 37:
case 38:
case 52:
return true;
}
return false;
case 190:
case 184:
case 202:
default:
return false;
}
}
function isTypeEqualityComparableTo(source, target) {
return (target.flags & 6144) !== 0 || isTypeComparableTo(source, target);
}
function getBestChoiceType(type1, type2) {
var firstAssignableToSecond = isTypeAssignableTo(type1, type2);
var secondAssignableToFirst = isTypeAssignableTo(type2, type1);
return secondAssignableToFirst && !firstAssignableToSecond ? type1 :
firstAssignableToSecond && !secondAssignableToFirst ? type2 :
getUnionType([type1, type2], true);
}
function checkBinaryExpression(node, checkMode) {
return checkBinaryLikeExpression(node.left, node.operatorToken, node.right, checkMode, node);
}
function checkBinaryLikeExpression(left, operatorToken, right, checkMode, errorNode) {
var operator = operatorToken.kind;
if (operator === 58 && (left.kind === 178 || left.kind === 177)) {
return checkDestructuringAssignment(left, checkExpression(right, checkMode), checkMode);
}
var leftType = checkExpression(left, checkMode);
var rightType = checkExpression(right, checkMode);
switch (operator) {
case 39:
case 40:
case 61:
case 62:
case 41:
case 63:
case 42:
case 64:
case 38:
case 60:
case 45:
case 65:
case 46:
case 66:
case 47:
case 67:
case 49:
case 69:
case 50:
case 70:
case 48:
case 68:
if (leftType === silentNeverType || rightType === silentNeverType) {
return silentNeverType;
}
leftType = checkNonNullType(leftType, left);
rightType = checkNonNullType(rightType, right);
var suggestedOperator = void 0;
if ((leftType.flags & 136) &&
(rightType.flags & 136) &&
(suggestedOperator = getSuggestedBooleanOperator(operatorToken.kind)) !== undefined) {
error(errorNode || operatorToken, ts.Diagnostics.The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead, ts.tokenToString(operatorToken.kind), ts.tokenToString(suggestedOperator));
}
else {
var leftOk = checkArithmeticOperandType(left, leftType, ts.Diagnostics.The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type);
var rightOk = checkArithmeticOperandType(right, rightType, ts.Diagnostics.The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_or_an_enum_type);
if (leftOk && rightOk) {
checkAssignmentOperator(numberType);
}
}
return numberType;
case 37:
case 59:
if (leftType === silentNeverType || rightType === silentNeverType) {
return silentNeverType;
}
if (!isTypeAssignableToKind(leftType, 262178) && !isTypeAssignableToKind(rightType, 262178)) {
leftType = checkNonNullType(leftType, left);
rightType = checkNonNullType(rightType, right);
}
var resultType = void 0;
if (isTypeAssignableToKind(leftType, 84, true) && isTypeAssignableToKind(rightType, 84, true)) {
resultType = numberType;
}
else if (isTypeAssignableToKind(leftType, 262178, true) || isTypeAssignableToKind(rightType, 262178, true)) {
resultType = stringType;
}
else if (isTypeAny(leftType) || isTypeAny(rightType)) {
resultType = leftType === unknownType || rightType === unknownType ? unknownType : anyType;
}
if (resultType && !checkForDisallowedESSymbolOperand(operator)) {
return resultType;
}
if (!resultType) {
reportOperatorError();
return anyType;
}
if (operator === 59) {
checkAssignmentOperator(resultType);
}
return resultType;
case 27:
case 29:
case 30:
case 31:
if (checkForDisallowedESSymbolOperand(operator)) {
leftType = getBaseTypeOfLiteralType(checkNonNullType(leftType, left));
rightType = getBaseTypeOfLiteralType(checkNonNullType(rightType, right));
if (!isTypeComparableTo(leftType, rightType) && !isTypeComparableTo(rightType, leftType)) {
reportOperatorError();
}
}
return booleanType;
case 32:
case 33:
case 34:
case 35:
var leftIsLiteral = isLiteralType(leftType);
var rightIsLiteral = isLiteralType(rightType);
if (!leftIsLiteral || !rightIsLiteral) {
leftType = leftIsLiteral ? getBaseTypeOfLiteralType(leftType) : leftType;
rightType = rightIsLiteral ? getBaseTypeOfLiteralType(rightType) : rightType;
}
if (!isTypeEqualityComparableTo(leftType, rightType) && !isTypeEqualityComparableTo(rightType, leftType)) {
reportOperatorError();
}
return booleanType;
case 93:
return checkInstanceOfExpression(left, right, leftType, rightType);
case 92:
return checkInExpression(left, right, leftType, rightType);
case 53:
return getTypeFacts(leftType) & 1048576 ?
getUnionType([extractDefinitelyFalsyTypes(strictNullChecks ? leftType : getBaseTypeOfLiteralType(rightType)), rightType]) :
leftType;
case 54:
return getTypeFacts(leftType) & 2097152 ?
getBestChoiceType(removeDefinitelyFalsyTypes(leftType), rightType) :
leftType;
case 58:
checkAssignmentOperator(rightType);
return getRegularTypeOfObjectLiteral(rightType);
case 26:
if (!compilerOptions.allowUnreachableCode && isSideEffectFree(left) && !isEvalNode(right)) {
error(left, ts.Diagnostics.Left_side_of_comma_operator_is_unused_and_has_no_side_effects);
}
return rightType;
}
function isEvalNode(node) {
return node.kind === 71 && node.escapedText === "eval";
}
function checkForDisallowedESSymbolOperand(operator) {
var offendingSymbolOperand = maybeTypeOfKind(leftType, 512) ? left :
maybeTypeOfKind(rightType, 512) ? right :
undefined;
if (offendingSymbolOperand) {
error(offendingSymbolOperand, ts.Diagnostics.The_0_operator_cannot_be_applied_to_type_symbol, ts.tokenToString(operator));
return false;
}
return true;
}
function getSuggestedBooleanOperator(operator) {
switch (operator) {
case 49:
case 69:
return 54;
case 50:
case 70:
return 35;
case 48:
case 68:
return 53;
default:
return undefined;
}
}
function checkAssignmentOperator(valueType) {
if (produceDiagnostics && ts.isAssignmentOperator(operator)) {
if (checkReferenceExpression(left, ts.Diagnostics.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access)) {
checkTypeAssignableTo(valueType, leftType, left, undefined);
}
}
}
function reportOperatorError() {
error(errorNode || operatorToken, ts.Diagnostics.Operator_0_cannot_be_applied_to_types_1_and_2, ts.tokenToString(operatorToken.kind), typeToString(leftType), typeToString(rightType));
}
}
function isYieldExpressionInClass(node) {
var current = node;
var parent = node.parent;
while (parent) {
if (ts.isFunctionLike(parent) && current === parent.body) {
return false;
}
else if (ts.isClassLike(current)) {
return true;
}
current = parent;
parent = parent.parent;
}
return false;
}
function checkYieldExpression(node) {
if (produceDiagnostics) {
if (!(node.flags & 4096) || isYieldExpressionInClass(node)) {
grammarErrorOnFirstToken(node, ts.Diagnostics.A_yield_expression_is_only_allowed_in_a_generator_body);
}
if (isInParameterInitializerBeforeContainingFunction(node)) {
error(node, ts.Diagnostics.yield_expressions_cannot_be_used_in_a_parameter_initializer);
}
}
if (node.expression) {
var func = ts.getContainingFunction(node);
var functionFlags = func && ts.getFunctionFlags(func);
if (node.asteriskToken) {
if ((functionFlags & 3) === 3 &&
languageVersion < 5) {
checkExternalEmitHelpers(node, 26624);
}
if ((functionFlags & 3) === 1 &&
languageVersion < 2 && compilerOptions.downlevelIteration) {
checkExternalEmitHelpers(node, 256);
}
}
if (functionFlags & 1) {
var expressionType = checkExpressionCached(node.expression);
var expressionElementType = void 0;
var nodeIsYieldStar = !!node.asteriskToken;
if (nodeIsYieldStar) {
expressionElementType = checkIteratedTypeOrElementType(expressionType, node.expression, false, (functionFlags & 2) !== 0);
}
var returnType = ts.getEffectiveReturnTypeNode(func);
if (returnType) {
var signatureElementType = getIteratedTypeOfGenerator(getTypeFromTypeNode(returnType), (functionFlags & 2) !== 0) || anyType;
if (nodeIsYieldStar) {
checkTypeAssignableTo(functionFlags & 2
? getAwaitedType(expressionElementType, node.expression, ts.Diagnostics.Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member)
: expressionElementType, signatureElementType, node.expression, undefined);
}
else {
checkTypeAssignableTo(functionFlags & 2
? getAwaitedType(expressionType, node.expression, ts.Diagnostics.Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member)
: expressionType, signatureElementType, node.expression, undefined);
}
}
}
}
return anyType;
}
function checkConditionalExpression(node, checkMode) {
checkExpression(node.condition);
var type1 = checkExpression(node.whenTrue, checkMode);
var type2 = checkExpression(node.whenFalse, checkMode);
return getBestChoiceType(type1, type2);
}
function checkTemplateExpression(node) {
ts.forEach(node.templateSpans, function (templateSpan) {
checkExpression(templateSpan.expression);
});
return stringType;
}
function checkExpressionWithContextualType(node, contextualType, contextualMapper) {
var saveContextualType = node.contextualType;
var saveContextualMapper = node.contextualMapper;
node.contextualType = contextualType;
node.contextualMapper = contextualMapper;
var checkMode = contextualMapper === identityMapper ? 1 :
contextualMapper ? 2 : 0;
var result = checkExpression(node, checkMode);
node.contextualType = saveContextualType;
node.contextualMapper = saveContextualMapper;
return result;
}
function checkExpressionCached(node, checkMode) {
var links = getNodeLinks(node);
if (!links.resolvedType) {
var saveFlowLoopStart = flowLoopStart;
flowLoopStart = flowLoopCount;
links.resolvedType = checkExpression(node, checkMode);
flowLoopStart = saveFlowLoopStart;
}
return links.resolvedType;
}
function isTypeAssertion(node) {
node = ts.skipParentheses(node);
return node.kind === 184 || node.kind === 202;
}
function checkDeclarationInitializer(declaration) {
var type = getTypeOfExpression(declaration.initializer, true);
return ts.getCombinedNodeFlags(declaration) & 2 ||
ts.getCombinedModifierFlags(declaration) & 64 && !ts.isParameterPropertyDeclaration(declaration) ||
isTypeAssertion(declaration.initializer) ? type : getWidenedLiteralType(type);
}
function isLiteralContextualType(contextualType) {
if (contextualType) {
if (contextualType.flags & 540672) {
var constraint = getBaseConstraintOfType(contextualType) || emptyObjectType;
if (constraint.flags & (2 | 4 | 8 | 16)) {
return true;
}
contextualType = constraint;
}
return maybeTypeOfKind(contextualType, (224 | 262144));
}
return false;
}
function checkExpressionForMutableLocation(node, checkMode, contextualType) {
if (arguments.length === 2) {
contextualType = getContextualType(node);
}
var type = checkExpression(node, checkMode);
var shouldWiden = isTypeAssertion(node) || isLiteralContextualType(contextualType);
return shouldWiden ? type : getWidenedLiteralType(type);
}
function checkPropertyAssignment(node, checkMode) {
if (node.name.kind === 144) {
checkComputedPropertyName(node.name);
}
return checkExpressionForMutableLocation(node.initializer, checkMode);
}
function checkObjectLiteralMethod(node, checkMode) {
checkGrammarMethod(node);
if (node.name.kind === 144) {
checkComputedPropertyName(node.name);
}
var uninstantiatedType = checkFunctionExpressionOrObjectLiteralMethod(node, checkMode);
return instantiateTypeWithSingleGenericCallSignature(node, uninstantiatedType, checkMode);
}
function instantiateTypeWithSingleGenericCallSignature(node, type, checkMode) {
if (checkMode === 2) {
var signature = getSingleCallSignature(type);
if (signature && signature.typeParameters) {
var contextualType = getApparentTypeOfContextualType(node);
if (contextualType) {
var contextualSignature = getSingleCallSignature(getNonNullableType(contextualType));
if (contextualSignature && !contextualSignature.typeParameters) {
return getOrCreateTypeFromSignature(instantiateSignatureInContextOf(signature, contextualSignature, getContextualMapper(node)));
}
}
}
}
return type;
}
function getTypeOfExpression(node, cache) {
if (node.kind === 181 && node.expression.kind !== 97 && !ts.isRequireCall(node, true)) {
var funcType = checkNonNullExpression(node.expression);
var signature = getSingleCallSignature(funcType);
if (signature && !signature.typeParameters) {
return getReturnTypeOfSignature(signature);
}
}
return cache ? checkExpressionCached(node) : checkExpression(node);
}
function getContextFreeTypeOfExpression(node) {
var saveContextualType = node.contextualType;
node.contextualType = anyType;
var type = getTypeOfExpression(node);
node.contextualType = saveContextualType;
return type;
}
function checkExpression(node, checkMode) {
var type;
if (node.kind === 143) {
type = checkQualifiedName(node);
}
else {
var uninstantiatedType = checkExpressionWorker(node, checkMode);
type = instantiateTypeWithSingleGenericCallSignature(node, uninstantiatedType, checkMode);
}
if (isConstEnumObjectType(type)) {
var ok = (node.parent.kind === 179 && node.parent.expression === node) ||
(node.parent.kind === 180 && node.parent.expression === node) ||
((node.kind === 71 || node.kind === 143) && isInRightSideOfImportOrExportAssignment(node));
if (!ok) {
error(node, ts.Diagnostics.const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment);
}
}
return type;
}
function checkParenthesizedExpression(node, checkMode) {
var tag = ts.isInJavaScriptFile(node) ? ts.getJSDocTypeTag(node) : undefined;
if (tag) {
return checkAssertionWorker(tag, tag.typeExpression.type, node.expression, checkMode);
}
return checkExpression(node.expression, checkMode);
}
function checkExpressionWorker(node, checkMode) {
switch (node.kind) {
case 71:
return checkIdentifier(node);
case 99:
return checkThisExpression(node);
case 97:
return checkSuperExpression(node);
case 95:
return nullWideningType;
case 13:
case 9:
return getFreshTypeOfLiteralType(getLiteralType(node.text));
case 8:
checkGrammarNumericLiteral(node);
return getFreshTypeOfLiteralType(getLiteralType(+node.text));
case 101:
return trueType;
case 86:
return falseType;
case 196:
return checkTemplateExpression(node);
case 12:
return globalRegExpType;
case 177:
return checkArrayLiteral(node, checkMode);
case 178:
return checkObjectLiteral(node, checkMode);
case 179:
return checkPropertyAccessExpression(node);
case 180:
return checkIndexedAccess(node);
case 181:
if (node.expression.kind === 91) {
return checkImportCallExpression(node);
}
case 182:
return checkCallExpression(node);
case 183:
return checkTaggedTemplateExpression(node);
case 185:
return checkParenthesizedExpression(node, checkMode);
case 199:
return checkClassExpression(node);
case 186:
case 187:
return checkFunctionExpressionOrObjectLiteralMethod(node, checkMode);
case 189:
return checkTypeOfExpression(node);
case 184:
case 202:
return checkAssertion(node);
case 203:
return checkNonNullAssertion(node);
case 204:
return checkMetaProperty(node);
case 188:
return checkDeleteExpression(node);
case 190:
return checkVoidExpression(node);
case 191:
return checkAwaitExpression(node);
case 192:
return checkPrefixUnaryExpression(node);
case 193:
return checkPostfixUnaryExpression(node);
case 194:
return checkBinaryExpression(node, checkMode);
case 195:
return checkConditionalExpression(node, checkMode);
case 198:
return checkSpreadExpression(node, checkMode);
case 200:
return undefinedWideningType;
case 197:
return checkYieldExpression(node);
case 256:
return checkJsxExpression(node, checkMode);
case 249:
return checkJsxElement(node);
case 250:
return checkJsxSelfClosingElement(node);
case 254:
return checkJsxAttributes(node, checkMode);
case 251:
ts.Debug.fail("Shouldn't ever directly check a JsxOpeningElement");
}
return unknownType;
}
function checkTypeParameter(node) {
if (node.expression) {
grammarErrorOnFirstToken(node.expression, ts.Diagnostics.Type_expected);
}
checkSourceElement(node.constraint);
checkSourceElement(node.default);
var typeParameter = getDeclaredTypeOfTypeParameter(getSymbolOfNode(node));
if (!hasNonCircularBaseConstraint(typeParameter)) {
error(node.constraint, ts.Diagnostics.Type_parameter_0_has_a_circular_constraint, typeToString(typeParameter));
}
if (!hasNonCircularTypeParameterDefault(typeParameter)) {
error(node.default, ts.Diagnostics.Type_parameter_0_has_a_circular_default, typeToString(typeParameter));
}
var constraintType = getConstraintOfTypeParameter(typeParameter);
var defaultType = getDefaultFromTypeParameter(typeParameter);
if (constraintType && defaultType) {
checkTypeAssignableTo(defaultType, getTypeWithThisArgument(constraintType, defaultType), node.default, ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1);
}
if (produceDiagnostics) {
checkTypeNameIsReserved(node.name, ts.Diagnostics.Type_parameter_name_cannot_be_0);
}
}
function checkParameter(node) {
checkGrammarDecorators(node) || checkGrammarModifiers(node);
checkVariableLikeDeclaration(node);
var func = ts.getContainingFunction(node);
if (ts.hasModifier(node, 92)) {
if (!(func.kind === 152 && ts.nodeIsPresent(func.body))) {
error(node, ts.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation);
}
}
if (node.questionToken && ts.isBindingPattern(node.name) && func.body) {
error(node, ts.Diagnostics.A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature);
}
if (node.name && ts.isIdentifier(node.name) && (node.name.escapedText === "this" || node.name.escapedText === "new")) {
if (ts.indexOf(func.parameters, node) !== 0) {
error(node, ts.Diagnostics.A_0_parameter_must_be_the_first_parameter, node.name.escapedText);
}
if (func.kind === 152 || func.kind === 156 || func.kind === 161) {
error(node, ts.Diagnostics.A_constructor_cannot_have_a_this_parameter);
}
}
if (node.dotDotDotToken && !ts.isBindingPattern(node.name) && !isArrayType(getTypeOfSymbol(node.symbol))) {
error(node, ts.Diagnostics.A_rest_parameter_must_be_of_an_array_type);
}
}
function getTypePredicateParameterIndex(parameterList, parameter) {
if (parameterList) {
for (var i = 0; i < parameterList.length; i++) {
var param = parameterList[i];
if (param.name.kind === 71 && param.name.escapedText === parameter.escapedText) {
return i;
}
}
}
return -1;
}
function checkTypePredicate(node) {
var parent = getTypePredicateParent(node);
if (!parent) {
error(node, ts.Diagnostics.A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods);
return;
}
var typePredicate = getSignatureFromDeclaration(parent).typePredicate;
if (!typePredicate) {
return;
}
checkSourceElement(node.type);
var parameterName = node.parameterName;
if (ts.isThisTypePredicate(typePredicate)) {
getTypeFromThisTypeNode(parameterName);
}
else {
if (typePredicate.parameterIndex >= 0) {
if (parent.parameters[typePredicate.parameterIndex].dotDotDotToken) {
error(parameterName, ts.Diagnostics.A_type_predicate_cannot_reference_a_rest_parameter);
}
else {
var leadingError = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type);
checkTypeAssignableTo(typePredicate.type, getTypeOfNode(parent.parameters[typePredicate.parameterIndex]), node.type, undefined, leadingError);
}
}
else if (parameterName) {
var hasReportedError = false;
for (var _i = 0, _a = parent.parameters; _i < _a.length; _i++) {
var name = _a[_i].name;
if (ts.isBindingPattern(name) &&
checkIfTypePredicateVariableIsDeclaredInBindingPattern(name, parameterName, typePredicate.parameterName)) {
hasReportedError = true;
break;
}
}
if (!hasReportedError) {
error(node.parameterName, ts.Diagnostics.Cannot_find_parameter_0, typePredicate.parameterName);
}
}
}
}
function getTypePredicateParent(node) {
switch (node.parent.kind) {
case 187:
case 155:
case 228:
case 186:
case 160:
case 151:
case 150:
var parent = node.parent;
if (node === parent.type) {
return parent;
}
}
}
function checkIfTypePredicateVariableIsDeclaredInBindingPattern(pattern, predicateVariableNode, predicateVariableName) {
for (var _i = 0, _a = pattern.elements; _i < _a.length; _i++) {
var element = _a[_i];
if (ts.isOmittedExpression(element)) {
continue;
}
var name = element.name;
if (name.kind === 71 && name.escapedText === predicateVariableName) {
error(predicateVariableNode, ts.Diagnostics.A_type_predicate_cannot_reference_element_0_in_a_binding_pattern, predicateVariableName);
return true;
}
else if (name.kind === 175 || name.kind === 174) {
if (checkIfTypePredicateVariableIsDeclaredInBindingPattern(name, predicateVariableNode, predicateVariableName)) {
return true;
}
}
}
}
function checkSignatureDeclaration(node) {
if (node.kind === 157) {
checkGrammarIndexSignature(node);
}
else if (node.kind === 160 || node.kind === 228 || node.kind === 161 ||
node.kind === 155 || node.kind === 152 ||
node.kind === 156) {
checkGrammarFunctionLikeDeclaration(node);
}
var functionFlags = ts.getFunctionFlags(node);
if (!(functionFlags & 4)) {
if ((functionFlags & 3) === 3 && languageVersion < 5) {
checkExternalEmitHelpers(node, 6144);
}
if ((functionFlags & 3) === 2 && languageVersion < 4) {
checkExternalEmitHelpers(node, 64);
}
if ((functionFlags & 3) !== 0 && languageVersion < 2) {
checkExternalEmitHelpers(node, 128);
}
}
checkTypeParameters(node.typeParameters);
ts.forEach(node.parameters, checkParameter);
if (node.type) {
checkSourceElement(node.type);
}
if (produceDiagnostics) {
checkCollisionWithArgumentsInGeneratedCode(node);
var returnTypeNode = ts.getEffectiveReturnTypeNode(node);
if (noImplicitAny && !returnTypeNode) {
switch (node.kind) {
case 156:
error(node, ts.Diagnostics.Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type);
break;
case 155:
error(node, ts.Diagnostics.Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type);
break;
}
}
if (returnTypeNode) {
var functionFlags_1 = ts.getFunctionFlags(node);
if ((functionFlags_1 & (4 | 1)) === 1) {
var returnType = getTypeFromTypeNode(returnTypeNode);
if (returnType === voidType) {
error(returnTypeNode, ts.Diagnostics.A_generator_cannot_have_a_void_type_annotation);
}
else {
var generatorElementType = getIteratedTypeOfGenerator(returnType, (functionFlags_1 & 2) !== 0) || anyType;
var iterableIteratorInstantiation = functionFlags_1 & 2
? createAsyncIterableIteratorType(generatorElementType)
: createIterableIteratorType(generatorElementType);
checkTypeAssignableTo(iterableIteratorInstantiation, returnType, returnTypeNode);
}
}
else if ((functionFlags_1 & 3) === 2) {
checkAsyncFunctionReturnType(node);
}
}
if (noUnusedIdentifiers && !node.body) {
checkUnusedTypeParameters(node);
}
}
}
function checkClassForDuplicateDeclarations(node) {
var instanceNames = ts.createUnderscoreEscapedMap();
var staticNames = ts.createUnderscoreEscapedMap();
for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
var member = _a[_i];
if (member.kind === 152) {
for (var _b = 0, _c = member.parameters; _b < _c.length; _b++) {
var param = _c[_b];
if (ts.isParameterPropertyDeclaration(param) && !ts.isBindingPattern(param.name)) {
addName(instanceNames, param.name, param.name.escapedText, 3);
}
}
}
else {
var isStatic = ts.hasModifier(member, 32);
var names = isStatic ? staticNames : instanceNames;
var memberName = member.name && ts.getPropertyNameForPropertyNameNode(member.name);
if (memberName) {
switch (member.kind) {
case 153:
addName(names, member.name, memberName, 1);
break;
case 154:
addName(names, member.name, memberName, 2);
break;
case 149:
addName(names, member.name, memberName, 3);
break;
case 151:
addName(names, member.name, memberName, 4);
break;
}
}
}
}
function addName(names, location, name, meaning) {
var prev = names.get(name);
if (prev) {
if (prev & 4) {
if (meaning !== 4) {
error(location, ts.Diagnostics.Duplicate_identifier_0, ts.getTextOfNode(location));
}
}
else if (prev & meaning) {
error(location, ts.Diagnostics.Duplicate_identifier_0, ts.getTextOfNode(location));
}
else {
names.set(name, prev | meaning);
}
}
else {
names.set(name, meaning);
}
}
}
function checkClassForStaticPropertyNameConflicts(node) {
for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
var member = _a[_i];
var memberNameNode = member.name;
var isStatic = ts.hasModifier(member, 32);
if (isStatic && memberNameNode) {
var memberName = ts.getPropertyNameForPropertyNameNode(memberNameNode);
switch (memberName) {
case "name":
case "length":
case "caller":
case "arguments":
case "prototype":
var message = ts.Diagnostics.Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1;
var className = getNameOfSymbol(getSymbolOfNode(node));
error(memberNameNode, message, memberName, className);
break;
}
}
}
}
function checkObjectTypeForDuplicateDeclarations(node) {
var names = ts.createMap();
for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
var member = _a[_i];
if (member.kind === 148) {
var memberName = void 0;
switch (member.name.kind) {
case 9:
case 8:
memberName = member.name.text;
break;
case 71:
memberName = ts.idText(member.name);
break;
default:
continue;
}
if (names.get(memberName)) {
error(ts.getNameOfDeclaration(member.symbol.valueDeclaration), ts.Diagnostics.Duplicate_identifier_0, memberName);
error(member.name, ts.Diagnostics.Duplicate_identifier_0, memberName);
}
else {
names.set(memberName, true);
}
}
}
}
function checkTypeForDuplicateIndexSignatures(node) {
if (node.kind === 230) {
var nodeSymbol = getSymbolOfNode(node);
if (nodeSymbol.declarations.length > 0 && nodeSymbol.declarations[0] !== node) {
return;
}
}
var indexSymbol = getIndexSymbol(getSymbolOfNode(node));
if (indexSymbol) {
var seenNumericIndexer = false;
var seenStringIndexer = false;
for (var _i = 0, _a = indexSymbol.declarations; _i < _a.length; _i++) {
var decl = _a[_i];
var declaration = decl;
if (declaration.parameters.length === 1 && declaration.parameters[0].type) {
switch (declaration.parameters[0].type.kind) {
case 136:
if (!seenStringIndexer) {
seenStringIndexer = true;
}
else {
error(declaration, ts.Diagnostics.Duplicate_string_index_signature);
}
break;
case 133:
if (!seenNumericIndexer) {
seenNumericIndexer = true;
}
else {
error(declaration, ts.Diagnostics.Duplicate_number_index_signature);
}
break;
}
}
}
}
}
function checkPropertyDeclaration(node) {
checkGrammarDecorators(node) || checkGrammarModifiers(node) || checkGrammarProperty(node) || checkGrammarComputedPropertyName(node.name);
checkVariableLikeDeclaration(node);
}
function checkMethodDeclaration(node) {
checkGrammarMethod(node) || checkGrammarComputedPropertyName(node.name);
checkFunctionOrMethodDeclaration(node);
if (ts.hasModifier(node, 128) && node.body) {
error(node, ts.Diagnostics.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract, ts.declarationNameToString(node.name));
}
}
function checkConstructorDeclaration(node) {
checkSignatureDeclaration(node);
checkGrammarConstructorTypeParameters(node) || checkGrammarConstructorTypeAnnotation(node);
checkSourceElement(node.body);
registerForUnusedIdentifiersCheck(node);
var symbol = getSymbolOfNode(node);
var firstDeclaration = ts.getDeclarationOfKind(symbol, node.kind);
if (node === firstDeclaration) {
checkFunctionOrConstructorSymbol(symbol);
}
if (ts.nodeIsMissing(node.body)) {
return;
}
if (!produceDiagnostics) {
return;
}
function containsSuperCallAsComputedPropertyName(n) {
var name = ts.getNameOfDeclaration(n);
return name && containsSuperCall(name);
}
function containsSuperCall(n) {
if (ts.isSuperCall(n)) {
return true;
}
else if (ts.isFunctionLike(n)) {
return false;
}
else if (ts.isClassLike(n)) {
return ts.forEach(n.members, containsSuperCallAsComputedPropertyName);
}
return ts.forEachChild(n, containsSuperCall);
}
function isInstancePropertyWithInitializer(n) {
return n.kind === 149 &&
!ts.hasModifier(n, 32) &&
!!n.initializer;
}
var containingClassDecl = node.parent;
if (ts.getClassExtendsHeritageClauseElement(containingClassDecl)) {
captureLexicalThis(node.parent, containingClassDecl);
var classExtendsNull = classDeclarationExtendsNull(containingClassDecl);
var superCall = getSuperCallInConstructor(node);
if (superCall) {
if (classExtendsNull) {
error(superCall, ts.Diagnostics.A_constructor_cannot_contain_a_super_call_when_its_class_extends_null);
}
var superCallShouldBeFirst = ts.some(node.parent.members, isInstancePropertyWithInitializer) ||
ts.some(node.parameters, function (p) { return ts.hasModifier(p, 92); });
if (superCallShouldBeFirst) {
var statements = node.body.statements;
var superCallStatement = void 0;
for (var _i = 0, statements_2 = statements; _i < statements_2.length; _i++) {
var statement = statements_2[_i];
if (statement.kind === 210 && ts.isSuperCall(statement.expression)) {
superCallStatement = statement;
break;
}
if (!ts.isPrologueDirective(statement)) {
break;
}
}
if (!superCallStatement) {
error(node, ts.Diagnostics.A_super_call_must_be_the_first_statement_in_the_constructor_when_a_class_contains_initialized_properties_or_has_parameter_properties);
}
}
}
else if (!classExtendsNull) {
error(node, ts.Diagnostics.Constructors_for_derived_classes_must_contain_a_super_call);
}
}
}
function checkAccessorDeclaration(node) {
if (produceDiagnostics) {
checkGrammarFunctionLikeDeclaration(node) || checkGrammarAccessor(node) || checkGrammarComputedPropertyName(node.name);
checkDecorators(node);
checkSignatureDeclaration(node);
if (node.kind === 153) {
if (!ts.isInAmbientContext(node) && ts.nodeIsPresent(node.body) && (node.flags & 128)) {
if (!(node.flags & 256)) {
error(node.name, ts.Diagnostics.A_get_accessor_must_return_a_value);
}
}
}
if (node.name.kind === 144) {
checkComputedPropertyName(node.name);
}
if (!ts.hasDynamicName(node)) {
var otherKind = node.kind === 153 ? 154 : 153;
var otherAccessor = ts.getDeclarationOfKind(node.symbol, otherKind);
if (otherAccessor) {
var nodeFlags = ts.getModifierFlags(node);
var otherFlags = ts.getModifierFlags(otherAccessor);
if ((nodeFlags & 28) !== (otherFlags & 28)) {
error(node.name, ts.Diagnostics.Getter_and_setter_accessors_do_not_agree_in_visibility);
}
if ((nodeFlags & 128) !== (otherFlags & 128)) {
error(node.name, ts.Diagnostics.Accessors_must_both_be_abstract_or_non_abstract);
}
checkAccessorDeclarationTypesIdentical(node, otherAccessor, getAnnotatedAccessorType, ts.Diagnostics.get_and_set_accessor_must_have_the_same_type);
checkAccessorDeclarationTypesIdentical(node, otherAccessor, getThisTypeOfDeclaration, ts.Diagnostics.get_and_set_accessor_must_have_the_same_this_type);
}
}
var returnType = getTypeOfAccessors(getSymbolOfNode(node));
if (node.kind === 153) {
checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, returnType);
}
}
checkSourceElement(node.body);
registerForUnusedIdentifiersCheck(node);
}
function checkAccessorDeclarationTypesIdentical(first, second, getAnnotatedType, message) {
var firstType = getAnnotatedType(first);
var secondType = getAnnotatedType(second);
if (firstType && secondType && !isTypeIdenticalTo(firstType, secondType)) {
error(first, message);
}
}
function checkMissingDeclaration(node) {
checkDecorators(node);
}
function checkTypeArgumentConstraints(typeParameters, typeArgumentNodes) {
var minTypeArgumentCount = getMinTypeArgumentCount(typeParameters);
var typeArguments;
var mapper;
var result = true;
for (var i = 0; i < typeParameters.length; i++) {
var constraint = getConstraintOfTypeParameter(typeParameters[i]);
if (constraint) {
if (!typeArguments) {
typeArguments = fillMissingTypeArguments(ts.map(typeArgumentNodes, getTypeFromTypeNode), typeParameters, minTypeArgumentCount, ts.isInJavaScriptFile(typeArgumentNodes[i]));
mapper = createTypeMapper(typeParameters, typeArguments);
}
var typeArgument = typeArguments[i];
result = result && checkTypeAssignableTo(typeArgument, instantiateType(constraint, mapper), typeArgumentNodes[i], ts.Diagnostics.Type_0_does_not_satisfy_the_constraint_1);
}
}
return result;
}
function checkTypeReferenceNode(node) {
checkGrammarTypeArguments(node, node.typeArguments);
if (node.kind === 159 && node.typeName.jsdocDotPos !== undefined && !ts.isInJavaScriptFile(node) && !ts.isInJSDoc(node)) {
grammarErrorAtPos(node, node.typeName.jsdocDotPos, 1, ts.Diagnostics.JSDoc_types_can_only_be_used_inside_documentation_comments);
}
var type = getTypeFromTypeReference(node);
if (type !== unknownType) {
if (node.typeArguments) {
ts.forEach(node.typeArguments, checkSourceElement);
if (produceDiagnostics) {
var symbol = getNodeLinks(node).resolvedSymbol;
if (!symbol) {
if (!ts.isJSDocIndexSignature(node)) {
error(node, ts.Diagnostics.Type_0_is_not_generic, typeToString(type));
}
return;
}
var typeParameters = symbol.flags & 524288 && getSymbolLinks(symbol).typeParameters;
if (!typeParameters && getObjectFlags(type) & 4) {
typeParameters = type.target.localTypeParameters;
}
checkTypeArgumentConstraints(typeParameters, node.typeArguments);
}
}
if (type.flags & 16 && getNodeLinks(node).resolvedSymbol.flags & 8) {
error(node, ts.Diagnostics.Enum_type_0_has_members_with_initializers_that_are_not_literals, typeToString(type));
}
}
}
function checkTypeQuery(node) {
getTypeFromTypeQueryNode(node);
}
function checkTypeLiteral(node) {
ts.forEach(node.members, checkSourceElement);
if (produceDiagnostics) {
var type = getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node);
checkIndexConstraints(type);
checkTypeForDuplicateIndexSignatures(node);
checkObjectTypeForDuplicateDeclarations(node);
}
}
function checkArrayType(node) {
checkSourceElement(node.elementType);
}
function checkTupleType(node) {
var hasErrorFromDisallowedTrailingComma = checkGrammarForDisallowedTrailingComma(node.elementTypes);
if (!hasErrorFromDisallowedTrailingComma && node.elementTypes.length === 0) {
grammarErrorOnNode(node, ts.Diagnostics.A_tuple_type_element_list_cannot_be_empty);
}
ts.forEach(node.elementTypes, checkSourceElement);
}
function checkUnionOrIntersectionType(node) {
ts.forEach(node.types, checkSourceElement);
}
function checkIndexedAccessIndexType(type, accessNode) {
if (!(type.flags & 524288)) {
return type;
}
var objectType = type.objectType;
var indexType = type.indexType;
if (isTypeAssignableTo(indexType, getIndexType(objectType))) {
if (accessNode.kind === 180 && ts.isAssignmentTarget(accessNode) &&
getObjectFlags(objectType) & 32 && objectType.declaration.readonlyToken) {
error(accessNode, ts.Diagnostics.Index_signature_in_type_0_only_permits_reading, typeToString(objectType));
}
return type;
}
if (getIndexInfoOfType(getApparentType(objectType), 1) && isTypeAssignableToKind(indexType, 84)) {
return type;
}
error(accessNode, ts.Diagnostics.Type_0_cannot_be_used_to_index_type_1, typeToString(indexType), typeToString(objectType));
return type;
}
function checkIndexedAccessType(node) {
checkSourceElement(node.objectType);
checkSourceElement(node.indexType);
checkIndexedAccessIndexType(getTypeFromIndexedAccessTypeNode(node), node);
}
function checkMappedType(node) {
checkSourceElement(node.typeParameter);
checkSourceElement(node.type);
var type = getTypeFromMappedTypeNode(node);
var constraintType = getConstraintTypeFromMappedType(type);
checkTypeAssignableTo(constraintType, stringType, node.typeParameter.constraint);
}
function isPrivateWithinAmbient(node) {
return ts.hasModifier(node, 8) && ts.isInAmbientContext(node);
}
function getEffectiveDeclarationFlags(n, flagsToCheck) {
var flags = ts.getCombinedModifierFlags(n);
if (n.parent.kind !== 230 &&
n.parent.kind !== 229 &&
n.parent.kind !== 199 &&
ts.isInAmbientContext(n)) {
if (!(flags & 2)) {
flags |= 1;
}
flags |= 2;
}
return flags & flagsToCheck;
}
function checkFunctionOrConstructorSymbol(symbol) {
if (!produceDiagnostics) {
return;
}
function getCanonicalOverload(overloads, implementation) {
var implementationSharesContainerWithFirstOverload = implementation !== undefined && implementation.parent === overloads[0].parent;
return implementationSharesContainerWithFirstOverload ? implementation : overloads[0];
}
function checkFlagAgreementBetweenOverloads(overloads, implementation, flagsToCheck, someOverloadFlags, allOverloadFlags) {
var someButNotAllOverloadFlags = someOverloadFlags ^ allOverloadFlags;
if (someButNotAllOverloadFlags !== 0) {
var canonicalFlags_1 = getEffectiveDeclarationFlags(getCanonicalOverload(overloads, implementation), flagsToCheck);
ts.forEach(overloads, function (o) {
var deviation = getEffectiveDeclarationFlags(o, flagsToCheck) ^ canonicalFlags_1;
if (deviation & 1) {
error(ts.getNameOfDeclaration(o), ts.Diagnostics.Overload_signatures_must_all_be_exported_or_non_exported);
}
else if (deviation & 2) {
error(ts.getNameOfDeclaration(o), ts.Diagnostics.Overload_signatures_must_all_be_ambient_or_non_ambient);
}
else if (deviation & (8 | 16)) {
error(ts.getNameOfDeclaration(o) || o, ts.Diagnostics.Overload_signatures_must_all_be_public_private_or_protected);
}
else if (deviation & 128) {
error(ts.getNameOfDeclaration(o), ts.Diagnostics.Overload_signatures_must_all_be_abstract_or_non_abstract);
}
});
}
}
function checkQuestionTokenAgreementBetweenOverloads(overloads, implementation, someHaveQuestionToken, allHaveQuestionToken) {
if (someHaveQuestionToken !== allHaveQuestionToken) {
var canonicalHasQuestionToken_1 = ts.hasQuestionToken(getCanonicalOverload(overloads, implementation));
ts.forEach(overloads, function (o) {
var deviation = ts.hasQuestionToken(o) !== canonicalHasQuestionToken_1;
if (deviation) {
error(ts.getNameOfDeclaration(o), ts.Diagnostics.Overload_signatures_must_all_be_optional_or_required);
}
});
}
}
var flagsToCheck = 1 | 2 | 8 | 16 | 128;
var someNodeFlags = 0;
var allNodeFlags = flagsToCheck;
var someHaveQuestionToken = false;
var allHaveQuestionToken = true;
var hasOverloads = false;
var bodyDeclaration;
var lastSeenNonAmbientDeclaration;
var previousDeclaration;
var declarations = symbol.declarations;
var isConstructor = (symbol.flags & 16384) !== 0;
function reportImplementationExpectedError(node) {
if (node.name && ts.nodeIsMissing(node.name)) {
return;
}
var seen = false;
var subsequentNode = ts.forEachChild(node.parent, function (c) {
if (seen) {
return c;
}
else {
seen = c === node;
}
});
if (subsequentNode && subsequentNode.pos === node.end) {
if (subsequentNode.kind === node.kind) {
var errorNode_1 = subsequentNode.name || subsequentNode;
var subsequentName = subsequentNode.name;
if (node.name && subsequentName &&
(ts.isComputedPropertyName(node.name) && ts.isComputedPropertyName(subsequentName) ||
!ts.isComputedPropertyName(node.name) && !ts.isComputedPropertyName(subsequentName) && ts.getEscapedTextOfIdentifierOrLiteral(node.name) === ts.getEscapedTextOfIdentifierOrLiteral(subsequentName))) {
var reportError = (node.kind === 151 || node.kind === 150) &&
ts.hasModifier(node, 32) !== ts.hasModifier(subsequentNode, 32);
if (reportError) {
var diagnostic = ts.hasModifier(node, 32) ? ts.Diagnostics.Function_overload_must_be_static : ts.Diagnostics.Function_overload_must_not_be_static;
error(errorNode_1, diagnostic);
}
return;
}
else if (ts.nodeIsPresent(subsequentNode.body)) {
error(errorNode_1, ts.Diagnostics.Function_implementation_name_must_be_0, ts.declarationNameToString(node.name));
return;
}
}
}
var errorNode = node.name || node;
if (isConstructor) {
error(errorNode, ts.Diagnostics.Constructor_implementation_is_missing);
}
else {
if (ts.hasModifier(node, 128)) {
error(errorNode, ts.Diagnostics.All_declarations_of_an_abstract_method_must_be_consecutive);
}
else {
error(errorNode, ts.Diagnostics.Function_implementation_is_missing_or_not_immediately_following_the_declaration);
}
}
}
var duplicateFunctionDeclaration = false;
var multipleConstructorImplementation = false;
for (var _i = 0, declarations_4 = declarations; _i < declarations_4.length; _i++) {
var current = declarations_4[_i];
var node = current;
var inAmbientContext = ts.isInAmbientContext(node);
var inAmbientContextOrInterface = node.parent.kind === 230 || node.parent.kind === 163 || inAmbientContext;
if (inAmbientContextOrInterface) {
previousDeclaration = undefined;
}
if (node.kind === 228 || node.kind === 151 || node.kind === 150 || node.kind === 152) {
var currentNodeFlags = getEffectiveDeclarationFlags(node, flagsToCheck);
someNodeFlags |= currentNodeFlags;
allNodeFlags &= currentNodeFlags;
someHaveQuestionToken = someHaveQuestionToken || ts.hasQuestionToken(node);
allHaveQuestionToken = allHaveQuestionToken && ts.hasQuestionToken(node);
if (ts.nodeIsPresent(node.body) && bodyDeclaration) {
if (isConstructor) {
multipleConstructorImplementation = true;
}
else {
duplicateFunctionDeclaration = true;
}
}
else if (previousDeclaration && previousDeclaration.parent === node.parent && previousDeclaration.end !== node.pos) {
reportImplementationExpectedError(previousDeclaration);
}
if (ts.nodeIsPresent(node.body)) {
if (!bodyDeclaration) {
bodyDeclaration = node;
}
}
else {
hasOverloads = true;
}
previousDeclaration = node;
if (!inAmbientContextOrInterface) {
lastSeenNonAmbientDeclaration = node;
}
}
}
if (multipleConstructorImplementation) {
ts.forEach(declarations, function (declaration) {
error(declaration, ts.Diagnostics.Multiple_constructor_implementations_are_not_allowed);
});
}
if (duplicateFunctionDeclaration) {
ts.forEach(declarations, function (declaration) {
error(ts.getNameOfDeclaration(declaration), ts.Diagnostics.Duplicate_function_implementation);
});
}
if (lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body &&
!ts.hasModifier(lastSeenNonAmbientDeclaration, 128) && !lastSeenNonAmbientDeclaration.questionToken) {
reportImplementationExpectedError(lastSeenNonAmbientDeclaration);
}
if (hasOverloads) {
checkFlagAgreementBetweenOverloads(declarations, bodyDeclaration, flagsToCheck, someNodeFlags, allNodeFlags);
checkQuestionTokenAgreementBetweenOverloads(declarations, bodyDeclaration, someHaveQuestionToken, allHaveQuestionToken);
if (bodyDeclaration) {
var signatures = getSignaturesOfSymbol(symbol);
var bodySignature = getSignatureFromDeclaration(bodyDeclaration);
for (var _a = 0, signatures_7 = signatures; _a < signatures_7.length; _a++) {
var signature = signatures_7[_a];
if (!isImplementationCompatibleWithOverload(bodySignature, signature)) {
error(signature.declaration, ts.Diagnostics.Overload_signature_is_not_compatible_with_function_implementation);
break;
}
}
}
}
}
function checkExportsOnMergedDeclarations(node) {
if (!produceDiagnostics) {
return;
}
var symbol = node.localSymbol;
if (!symbol) {
symbol = getSymbolOfNode(node);
if (!symbol.exportSymbol) {
return;
}
}
if (ts.getDeclarationOfKind(symbol, node.kind) !== node) {
return;
}
var exportedDeclarationSpaces = 0;
var nonExportedDeclarationSpaces = 0;
var defaultExportedDeclarationSpaces = 0;
for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
var d = _a[_i];
var declarationSpaces = getDeclarationSpaces(d);
var effectiveDeclarationFlags = getEffectiveDeclarationFlags(d, 1 | 512);
if (effectiveDeclarationFlags & 1) {
if (effectiveDeclarationFlags & 512) {
defaultExportedDeclarationSpaces |= declarationSpaces;
}
else {
exportedDeclarationSpaces |= declarationSpaces;
}
}
else {
nonExportedDeclarationSpaces |= declarationSpaces;
}
}
var nonDefaultExportedDeclarationSpaces = exportedDeclarationSpaces | nonExportedDeclarationSpaces;
var commonDeclarationSpacesForExportsAndLocals = exportedDeclarationSpaces & nonExportedDeclarationSpaces;
var commonDeclarationSpacesForDefaultAndNonDefault = defaultExportedDeclarationSpaces & nonDefaultExportedDeclarationSpaces;
if (commonDeclarationSpacesForExportsAndLocals || commonDeclarationSpacesForDefaultAndNonDefault) {
for (var _b = 0, _c = symbol.declarations; _b < _c.length; _b++) {
var d = _c[_b];
var declarationSpaces = getDeclarationSpaces(d);
var name = ts.getNameOfDeclaration(d);
if (declarationSpaces & commonDeclarationSpacesForDefaultAndNonDefault) {
error(name, ts.Diagnostics.Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_default_0_declaration_instead, ts.declarationNameToString(name));
}
else if (declarationSpaces & commonDeclarationSpacesForExportsAndLocals) {
error(name, ts.Diagnostics.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local, ts.declarationNameToString(name));
}
}
}
function getDeclarationSpaces(d) {
switch (d.kind) {
case 230:
case 231:
case 283:
return 2;
case 233:
return ts.isAmbientModule(d) || ts.getModuleInstanceState(d) !== 0
? 4 | 1
: 4;
case 229:
case 232:
return 2 | 1;
case 237:
case 240:
case 239:
var result_3 = 0;
var target = resolveAlias(getSymbolOfNode(d));
ts.forEach(target.declarations, function (d) { result_3 |= getDeclarationSpaces(d); });
return result_3;
case 226:
case 176:
case 228:
case 242:
return 1;
default:
ts.Debug.fail(ts.SyntaxKind[d.kind]);
}
}
}
function getAwaitedTypeOfPromise(type, errorNode, diagnosticMessage) {
var promisedType = getPromisedTypeOfPromise(type, errorNode);
return promisedType && getAwaitedType(promisedType, errorNode, diagnosticMessage);
}
function getPromisedTypeOfPromise(promise, errorNode) {
if (isTypeAny(promise)) {
return undefined;
}
var typeAsPromise = promise;
if (typeAsPromise.promisedTypeOfPromise) {
return typeAsPromise.promisedTypeOfPromise;
}
if (isReferenceToType(promise, getGlobalPromiseType(false))) {
return typeAsPromise.promisedTypeOfPromise = promise.typeArguments[0];
}
var thenFunction = getTypeOfPropertyOfType(promise, "then");
if (isTypeAny(thenFunction)) {
return undefined;
}
var thenSignatures = thenFunction ? getSignaturesOfType(thenFunction, 0) : ts.emptyArray;
if (thenSignatures.length === 0) {
if (errorNode) {
error(errorNode, ts.Diagnostics.A_promise_must_have_a_then_method);
}
return undefined;
}
var onfulfilledParameterType = getTypeWithFacts(getUnionType(ts.map(thenSignatures, getTypeOfFirstParameterOfSignature)), 524288);
if (isTypeAny(onfulfilledParameterType)) {
return undefined;
}
var onfulfilledParameterSignatures = getSignaturesOfType(onfulfilledParameterType, 0);
if (onfulfilledParameterSignatures.length === 0) {
if (errorNode) {
error(errorNode, ts.Diagnostics.The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback);
}
return undefined;
}
return typeAsPromise.promisedTypeOfPromise = getUnionType(ts.map(onfulfilledParameterSignatures, getTypeOfFirstParameterOfSignature), true);
}
function checkAwaitedType(type, errorNode, diagnosticMessage) {
return getAwaitedType(type, errorNode, diagnosticMessage) || unknownType;
}
function getAwaitedType(type, errorNode, diagnosticMessage) {
var typeAsAwaitable = type;
if (typeAsAwaitable.awaitedTypeOfType) {
return typeAsAwaitable.awaitedTypeOfType;
}
if (isTypeAny(type)) {
return typeAsAwaitable.awaitedTypeOfType = type;
}
if (type.flags & 65536) {
var types = void 0;
for (var _i = 0, _a = type.types; _i < _a.length; _i++) {
var constituentType = _a[_i];
types = ts.append(types, getAwaitedType(constituentType, errorNode, diagnosticMessage));
}
if (!types) {
return undefined;
}
return typeAsAwaitable.awaitedTypeOfType = getUnionType(types);
}
var promisedType = getPromisedTypeOfPromise(type);
if (promisedType) {
if (type.id === promisedType.id || ts.indexOf(awaitedTypeStack, promisedType.id) >= 0) {
if (errorNode) {
error(errorNode, ts.Diagnostics.Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method);
}
return undefined;
}
awaitedTypeStack.push(type.id);
var awaitedType = getAwaitedType(promisedType, errorNode, diagnosticMessage);
awaitedTypeStack.pop();
if (!awaitedType) {
return undefined;
}
return typeAsAwaitable.awaitedTypeOfType = awaitedType;
}
var thenFunction = getTypeOfPropertyOfType(type, "then");
if (thenFunction && getSignaturesOfType(thenFunction, 0).length > 0) {
if (errorNode) {
ts.Debug.assert(!!diagnosticMessage);
error(errorNode, diagnosticMessage);
}
return undefined;
}
return typeAsAwaitable.awaitedTypeOfType = type;
}
function checkAsyncFunctionReturnType(node) {
var returnTypeNode = ts.getEffectiveReturnTypeNode(node);
var returnType = getTypeFromTypeNode(returnTypeNode);
if (languageVersion >= 2) {
if (returnType === unknownType) {
return unknownType;
}
var globalPromiseType = getGlobalPromiseType(true);
if (globalPromiseType !== emptyGenericType && !isReferenceToType(returnType, globalPromiseType)) {
error(returnTypeNode, ts.Diagnostics.The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type);
return unknownType;
}
}
else {
markTypeNodeAsReferenced(returnTypeNode);
if (returnType === unknownType) {
return unknownType;
}
var promiseConstructorName = ts.getEntityNameFromTypeNode(returnTypeNode);
if (promiseConstructorName === undefined) {
error(returnTypeNode, ts.Diagnostics.Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Promise_compatible_constructor_value, typeToString(returnType));
return unknownType;
}
var promiseConstructorSymbol = resolveEntityName(promiseConstructorName, 107455, true);
var promiseConstructorType = promiseConstructorSymbol ? getTypeOfSymbol(promiseConstructorSymbol) : unknownType;
if (promiseConstructorType === unknownType) {
if (promiseConstructorName.kind === 71 && promiseConstructorName.escapedText === "Promise" && getTargetType(returnType) === getGlobalPromiseType(false)) {
error(returnTypeNode, ts.Diagnostics.An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option);
}
else {
error(returnTypeNode, ts.Diagnostics.Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Promise_compatible_constructor_value, ts.entityNameToString(promiseConstructorName));
}
return unknownType;
}
var globalPromiseConstructorLikeType = getGlobalPromiseConstructorLikeType(true);
if (globalPromiseConstructorLikeType === emptyObjectType) {
error(returnTypeNode, ts.Diagnostics.Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Promise_compatible_constructor_value, ts.entityNameToString(promiseConstructorName));
return unknownType;
}
if (!checkTypeAssignableTo(promiseConstructorType, globalPromiseConstructorLikeType, returnTypeNode, ts.Diagnostics.Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Promise_compatible_constructor_value)) {
return unknownType;
}
var rootName = promiseConstructorName && getFirstIdentifier(promiseConstructorName);
var collidingSymbol = getSymbol(node.locals, rootName.escapedText, 107455);
if (collidingSymbol) {
error(collidingSymbol.valueDeclaration, ts.Diagnostics.Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions, ts.idText(rootName), ts.entityNameToString(promiseConstructorName));
return unknownType;
}
}
return checkAwaitedType(returnType, node, ts.Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member);
}
function checkDecorator(node) {
var signature = getResolvedSignature(node);
var returnType = getReturnTypeOfSignature(signature);
if (returnType.flags & 1) {
return;
}
var expectedReturnType;
var headMessage = getDiagnosticHeadMessageForDecoratorResolution(node);
var errorInfo;
switch (node.parent.kind) {
case 229:
var classSymbol = getSymbolOfNode(node.parent);
var classConstructorType = getTypeOfSymbol(classSymbol);
expectedReturnType = getUnionType([classConstructorType, voidType]);
break;
case 146:
expectedReturnType = voidType;
errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any);
break;
case 149:
expectedReturnType = voidType;
errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.The_return_type_of_a_property_decorator_function_must_be_either_void_or_any);
break;
case 151:
case 153:
case 154:
var methodType = getTypeOfNode(node.parent);
var descriptorType = createTypedPropertyDescriptorType(methodType);
expectedReturnType = getUnionType([descriptorType, voidType]);
break;
}
checkTypeAssignableTo(returnType, expectedReturnType, node, headMessage, errorInfo);
}
function markTypeNodeAsReferenced(node) {
markEntityNameOrEntityExpressionAsReference(node && ts.getEntityNameFromTypeNode(node));
}
function markEntityNameOrEntityExpressionAsReference(typeName) {
if (!typeName)
return;
var rootName = getFirstIdentifier(typeName);
var meaning = (typeName.kind === 71 ? 793064 : 1920) | 2097152;
var rootSymbol = resolveName(rootName, rootName.escapedText, meaning, undefined, undefined, true);
if (rootSymbol
&& rootSymbol.flags & 2097152
&& symbolIsValue(rootSymbol)
&& !isConstEnumOrConstEnumOnlyModule(resolveAlias(rootSymbol))) {
markAliasSymbolAsReferenced(rootSymbol);
}
}
function markDecoratorMedataDataTypeNodeAsReferenced(node) {
var entityName = getEntityNameForDecoratorMetadata(node);
if (entityName && ts.isEntityName(entityName)) {
markEntityNameOrEntityExpressionAsReference(entityName);
}
}
function getEntityNameForDecoratorMetadata(node) {
if (node) {
switch (node.kind) {
case 167:
case 166:
var commonEntityName = void 0;
for (var _i = 0, _a = node.types; _i < _a.length; _i++) {
var typeNode = _a[_i];
var individualEntityName = getEntityNameForDecoratorMetadata(typeNode);
if (!individualEntityName) {
return undefined;
}
if (commonEntityName) {
if (!ts.isIdentifier(commonEntityName) ||
!ts.isIdentifier(individualEntityName) ||
commonEntityName.escapedText !== individualEntityName.escapedText) {
return undefined;
}
}
else {
commonEntityName = individualEntityName;
}
}
return commonEntityName;
case 168:
return getEntityNameForDecoratorMetadata(node.type);
case 159:
return node.typeName;
}
}
}
function getParameterTypeNodeForDecoratorCheck(node) {
var typeNode = ts.getEffectiveTypeAnnotationNode(node);
return ts.isRestParameter(node) ? ts.getRestParameterElementType(typeNode) : typeNode;
}
function checkDecorators(node) {
if (!node.decorators) {
return;
}
if (!ts.nodeCanBeDecorated(node)) {
return;
}
if (!compilerOptions.experimentalDecorators) {
error(node, ts.Diagnostics.Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_the_experimentalDecorators_option_to_remove_this_warning);
}
var firstDecorator = node.decorators[0];
checkExternalEmitHelpers(firstDecorator, 8);
if (node.kind === 146) {
checkExternalEmitHelpers(firstDecorator, 32);
}
if (compilerOptions.emitDecoratorMetadata) {
checkExternalEmitHelpers(firstDecorator, 16);
switch (node.kind) {
case 229:
var constructor = ts.getFirstConstructorWithBody(node);
if (constructor) {
for (var _i = 0, _a = constructor.parameters; _i < _a.length; _i++) {
var parameter = _a[_i];
markDecoratorMedataDataTypeNodeAsReferenced(getParameterTypeNodeForDecoratorCheck(parameter));
}
}
break;
case 151:
case 153:
case 154:
for (var _b = 0, _c = node.parameters; _b < _c.length; _b++) {
var parameter = _c[_b];
markDecoratorMedataDataTypeNodeAsReferenced(getParameterTypeNodeForDecoratorCheck(parameter));
}
markDecoratorMedataDataTypeNodeAsReferenced(ts.getEffectiveReturnTypeNode(node));
break;
case 149:
markDecoratorMedataDataTypeNodeAsReferenced(ts.getEffectiveTypeAnnotationNode(node));
break;
case 146:
markDecoratorMedataDataTypeNodeAsReferenced(getParameterTypeNodeForDecoratorCheck(node));
break;
}
}
ts.forEach(node.decorators, checkDecorator);
}
function checkFunctionDeclaration(node) {
if (produceDiagnostics) {
checkFunctionOrMethodDeclaration(node);
checkGrammarForGenerator(node);
checkCollisionWithCapturedSuperVariable(node, node.name);
checkCollisionWithCapturedThisVariable(node, node.name);
checkCollisionWithCapturedNewTargetVariable(node, node.name);
checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
}
}
function checkJSDocTypedefTag(node) {
if (!node.typeExpression) {
error(node.name, ts.Diagnostics.JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags);
}
}
function checkJSDocParameterTag(node) {
checkSourceElement(node.typeExpression);
if (!ts.getParameterSymbolFromJSDoc(node)) {
error(node.name, ts.Diagnostics.JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name, ts.idText(node.name.kind === 143 ? node.name.right : node.name));
}
}
function checkJSDocAugmentsTag(node) {
var classLike = ts.getJSDocHost(node);
if (!ts.isClassDeclaration(classLike) && !ts.isClassExpression(classLike)) {
error(classLike, ts.Diagnostics.JSDoc_0_is_not_attached_to_a_class, ts.idText(node.tagName));
return;
}
var augmentsTags = ts.getAllJSDocTagsOfKind(classLike, 277);
ts.Debug.assert(augmentsTags.length > 0);
if (augmentsTags.length > 1) {
error(augmentsTags[1], ts.Diagnostics.Class_declarations_cannot_have_more_than_one_augments_or_extends_tag);
}
var name = getIdentifierFromEntityNameExpression(node.class.expression);
var extend = ts.getClassExtendsHeritageClauseElement(classLike);
if (extend) {
var className = getIdentifierFromEntityNameExpression(extend.expression);
if (className && name.escapedText !== className.escapedText) {
error(name, ts.Diagnostics.JSDoc_0_1_does_not_match_the_extends_2_clause, ts.idText(node.tagName), ts.idText(name), ts.idText(className));
}
}
}
function getIdentifierFromEntityNameExpression(node) {
switch (node.kind) {
case 71:
return node;
case 179:
return node.name;
default:
return undefined;
}
}
function checkFunctionOrMethodDeclaration(node) {
checkDecorators(node);
checkSignatureDeclaration(node);
var functionFlags = ts.getFunctionFlags(node);
if (node.name && node.name.kind === 144) {
checkComputedPropertyName(node.name);
}
if (!ts.hasDynamicName(node)) {
var symbol = getSymbolOfNode(node);
var localSymbol = node.localSymbol || symbol;
var firstDeclaration = ts.find(localSymbol.declarations, function (declaration) { return declaration.kind === node.kind && !(declaration.flags & 65536); });
if (node === firstDeclaration) {
checkFunctionOrConstructorSymbol(localSymbol);
}
if (symbol.parent) {
if (ts.getDeclarationOfKind(symbol, node.kind) === node) {
checkFunctionOrConstructorSymbol(symbol);
}
}
}
checkSourceElement(node.body);
var returnTypeNode = ts.getEffectiveReturnTypeNode(node);
if ((functionFlags & 1) === 0) {
var returnOrPromisedType = returnTypeNode && (functionFlags & 2
? checkAsyncFunctionReturnType(node)
: getTypeFromTypeNode(returnTypeNode));
checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, returnOrPromisedType);
}
if (produceDiagnostics && !returnTypeNode) {
if (noImplicitAny && ts.nodeIsMissing(node.body) && !isPrivateWithinAmbient(node)) {
reportImplicitAnyError(node, anyType);
}
if (functionFlags & 1 && ts.nodeIsPresent(node.body)) {
getReturnTypeOfSignature(getSignatureFromDeclaration(node));
}
}
registerForUnusedIdentifiersCheck(node);
}
function registerForUnusedIdentifiersCheck(node) {
if (deferredUnusedIdentifierNodes) {
deferredUnusedIdentifierNodes.push(node);
}
}
function checkUnusedIdentifiers() {
if (deferredUnusedIdentifierNodes) {
for (var _i = 0, deferredUnusedIdentifierNodes_1 = deferredUnusedIdentifierNodes; _i < deferredUnusedIdentifierNodes_1.length; _i++) {
var node = deferredUnusedIdentifierNodes_1[_i];
switch (node.kind) {
case 265:
case 233:
checkUnusedModuleMembers(node);
break;
case 229:
case 199:
checkUnusedClassMembers(node);
checkUnusedTypeParameters(node);
break;
case 230:
checkUnusedTypeParameters(node);
break;
case 207:
case 235:
case 214:
case 215:
case 216:
checkUnusedLocalsAndParameters(node);
break;
case 152:
case 186:
case 228:
case 187:
case 151:
case 153:
case 154:
if (node.body) {
checkUnusedLocalsAndParameters(node);
}
checkUnusedTypeParameters(node);
break;
case 150:
case 155:
case 156:
case 157:
case 160:
case 161:
checkUnusedTypeParameters(node);
break;
case 231:
checkUnusedTypeParameters(node);
break;
}
}
}
}
function checkUnusedLocalsAndParameters(node) {
if (node.parent.kind !== 230 && noUnusedIdentifiers && !ts.isInAmbientContext(node)) {
node.locals.forEach(function (local) {
if (!local.isReferenced) {
if (local.valueDeclaration && ts.getRootDeclaration(local.valueDeclaration).kind === 146) {
var parameter = ts.getRootDeclaration(local.valueDeclaration);
var name = ts.getNameOfDeclaration(local.valueDeclaration);
if (compilerOptions.noUnusedParameters &&
!ts.isParameterPropertyDeclaration(parameter) &&
!ts.parameterIsThisKeyword(parameter) &&
!parameterNameStartsWithUnderscore(name)) {
error(name, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, ts.symbolName(local));
}
}
else if (compilerOptions.noUnusedLocals) {
ts.forEach(local.declarations, function (d) { return errorUnusedLocal(d, ts.symbolName(local)); });
}
}
});
}
}
function isRemovedPropertyFromObjectSpread(node) {
if (ts.isBindingElement(node) && ts.isObjectBindingPattern(node.parent)) {
var lastElement = ts.lastOrUndefined(node.parent.elements);
return lastElement !== node && !!lastElement.dotDotDotToken;
}
return false;
}
function errorUnusedLocal(declaration, name) {
var node = ts.getNameOfDeclaration(declaration) || declaration;
if (isIdentifierThatStartsWithUnderScore(node)) {
var declaration_2 = ts.getRootDeclaration(node.parent);
if ((declaration_2.kind === 226 && ts.isForInOrOfStatement(declaration_2.parent.parent)) ||
declaration_2.kind === 145) {
return;
}
}
if (!isRemovedPropertyFromObjectSpread(node.kind === 71 ? node.parent : node)) {
error(node, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, name);
}
}
function parameterNameStartsWithUnderscore(parameterName) {
return parameterName && isIdentifierThatStartsWithUnderScore(parameterName);
}
function isIdentifierThatStartsWithUnderScore(node) {
return node.kind === 71 && ts.idText(node).charCodeAt(0) === 95;
}
function checkUnusedClassMembers(node) {
if (compilerOptions.noUnusedLocals && !ts.isInAmbientContext(node)) {
if (node.members) {
for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
var member = _a[_i];
if (member.kind === 151 || member.kind === 149) {
if (!member.symbol.isReferenced && ts.hasModifier(member, 8)) {
error(member.name, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, ts.symbolName(member.symbol));
}
}
else if (member.kind === 152) {
for (var _b = 0, _c = member.parameters; _b < _c.length; _b++) {
var parameter = _c[_b];
if (!parameter.symbol.isReferenced && ts.hasModifier(parameter, 8)) {
error(parameter.name, ts.Diagnostics.Property_0_is_declared_but_its_value_is_never_read, ts.symbolName(parameter.symbol));
}
}
}
}
}
}
}
function checkUnusedTypeParameters(node) {
if (compilerOptions.noUnusedLocals && !ts.isInAmbientContext(node)) {
if (node.typeParameters) {
var symbol = getSymbolOfNode(node);
var lastDeclaration = symbol && symbol.declarations && ts.lastOrUndefined(symbol.declarations);
if (lastDeclaration !== node) {
return;
}
for (var _i = 0, _a = node.typeParameters; _i < _a.length; _i++) {
var typeParameter = _a[_i];
if (!getMergedSymbol(typeParameter.symbol).isReferenced && !isIdentifierThatStartsWithUnderScore(typeParameter.name)) {
error(typeParameter.name, ts.Diagnostics._0_is_declared_but_its_value_is_never_read, ts.symbolName(typeParameter.symbol));
}
}
}
}
}
function checkUnusedModuleMembers(node) {
if (compilerOptions.noUnusedLocals && !ts.isInAmbientContext(node)) {
node.locals.forEach(function (local) {
if (!local.isReferenced && !local.exportSymbol) {
for (var _i = 0, _a = local.declarations; _i < _a.length; _i++) {
var declaration = _a[_i];
if (!ts.isAmbientModule(declaration)) {
errorUnusedLocal(declaration, ts.symbolName(local));
}
}
}
});
}
}
function checkBlock(node) {
if (node.kind === 207) {
checkGrammarStatementInAmbientContext(node);
}
if (ts.isFunctionOrModuleBlock(node)) {
var saveFlowAnalysisDisabled = flowAnalysisDisabled;
ts.forEach(node.statements, checkSourceElement);
flowAnalysisDisabled = saveFlowAnalysisDisabled;
}
else {
ts.forEach(node.statements, checkSourceElement);
}
if (node.locals) {
registerForUnusedIdentifiersCheck(node);
}
}
function checkCollisionWithArgumentsInGeneratedCode(node) {
if (!ts.hasRestParameter(node) || ts.isInAmbientContext(node) || ts.nodeIsMissing(node.body)) {
return;
}
ts.forEach(node.parameters, function (p) {
if (p.name && !ts.isBindingPattern(p.name) && p.name.escapedText === argumentsSymbol.escapedName) {
error(p, ts.Diagnostics.Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters);
}
});
}
function needCollisionCheckForIdentifier(node, identifier, name) {
if (!(identifier && identifier.escapedText === name)) {
return false;
}
if (node.kind === 149 ||
node.kind === 148 ||
node.kind === 151 ||
node.kind === 150 ||
node.kind === 153 ||
node.kind === 154) {
return false;
}
if (ts.isInAmbientContext(node)) {
return false;
}
var root = ts.getRootDeclaration(node);
if (root.kind === 146 && ts.nodeIsMissing(root.parent.body)) {
return false;
}
return true;
}
function checkCollisionWithCapturedThisVariable(node, name) {
if (needCollisionCheckForIdentifier(node, name, "_this")) {
potentialThisCollisions.push(node);
}
}
function checkCollisionWithCapturedNewTargetVariable(node, name) {
if (needCollisionCheckForIdentifier(node, name, "_newTarget")) {
potentialNewTargetCollisions.push(node);
}
}
function checkIfThisIsCapturedInEnclosingScope(node) {
ts.findAncestor(node, function (current) {
if (getNodeCheckFlags(current) & 4) {
var isDeclaration_1 = node.kind !== 71;
if (isDeclaration_1) {
error(ts.getNameOfDeclaration(node), ts.Diagnostics.Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference);
}
else {
error(node, ts.Diagnostics.Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference);
}
return true;
}
});
}
function checkIfNewTargetIsCapturedInEnclosingScope(node) {
ts.findAncestor(node, function (current) {
if (getNodeCheckFlags(current) & 8) {
var isDeclaration_2 = node.kind !== 71;
if (isDeclaration_2) {
error(ts.getNameOfDeclaration(node), ts.Diagnostics.Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_meta_property_reference);
}
else {
error(node, ts.Diagnostics.Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta_property_reference);
}
return true;
}
});
}
function checkCollisionWithCapturedSuperVariable(node, name) {
if (!needCollisionCheckForIdentifier(node, name, "_super")) {
return;
}
var enclosingClass = ts.getContainingClass(node);
if (!enclosingClass || ts.isInAmbientContext(enclosingClass)) {
return;
}
if (ts.getClassExtendsHeritageClauseElement(enclosingClass)) {
var isDeclaration_3 = node.kind !== 71;
if (isDeclaration_3) {
error(node, ts.Diagnostics.Duplicate_identifier_super_Compiler_uses_super_to_capture_base_class_reference);
}
else {
error(node, ts.Diagnostics.Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference);
}
}
}
function checkCollisionWithRequireExportsInGeneratedCode(node, name) {
if (modulekind >= ts.ModuleKind.ES2015) {
return;
}
if (!needCollisionCheckForIdentifier(node, name, "require") && !needCollisionCheckForIdentifier(node, name, "exports")) {
return;
}
if (node.kind === 233 && ts.getModuleInstanceState(node) !== 1) {
return;
}
var parent = getDeclarationContainer(node);
if (parent.kind === 265 && ts.isExternalOrCommonJsModule(parent)) {
error(name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module, ts.declarationNameToString(name), ts.declarationNameToString(name));
}
}
function checkCollisionWithGlobalPromiseInGeneratedCode(node, name) {
if (languageVersion >= 4 || !needCollisionCheckForIdentifier(node, name, "Promise")) {
return;
}
if (node.kind === 233 && ts.getModuleInstanceState(node) !== 1) {
return;
}
var parent = getDeclarationContainer(node);
if (parent.kind === 265 && ts.isExternalOrCommonJsModule(parent) && parent.flags & 1024) {
error(name, ts.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_functions, ts.declarationNameToString(name), ts.declarationNameToString(name));
}
}
function checkVarDeclaredNamesNotShadowed(node) {
if ((ts.getCombinedNodeFlags(node) & 3) !== 0 || ts.isParameterDeclaration(node)) {
return;
}
if (node.kind === 226 && !node.initializer) {
return;
}
var symbol = getSymbolOfNode(node);
if (symbol.flags & 1) {
if (!ts.isIdentifier(node.name))
throw ts.Debug.fail();
var localDeclarationSymbol = resolveName(node, node.name.escapedText, 3, undefined, undefined, false);
if (localDeclarationSymbol &&
localDeclarationSymbol !== symbol &&
localDeclarationSymbol.flags & 2) {
if (getDeclarationNodeFlagsFromSymbol(localDeclarationSymbol) & 3) {
var varDeclList = ts.getAncestor(localDeclarationSymbol.valueDeclaration, 227);
var container = varDeclList.parent.kind === 208 && varDeclList.parent.parent
? varDeclList.parent.parent
: undefined;
var namesShareScope = container &&
(container.kind === 207 && ts.isFunctionLike(container.parent) ||
container.kind === 234 ||
container.kind === 233 ||
container.kind === 265);
if (!namesShareScope) {
var name = symbolToString(localDeclarationSymbol);
error(node, ts.Diagnostics.Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1, name, name);
}
}
}
}
}
function checkParameterInitializer(node) {
if (ts.getRootDeclaration(node).kind !== 146) {
return;
}
var func = ts.getContainingFunction(node);
visit(node.initializer);
function visit(n) {
if (ts.isTypeNode(n) || ts.isDeclarationName(n)) {
return;
}
if (n.kind === 179) {
return visit(n.expression);
}
else if (n.kind === 71) {
var symbol = resolveName(n, n.escapedText, 107455 | 2097152, undefined, undefined, false);
if (!symbol || symbol === unknownSymbol || !symbol.valueDeclaration) {
return;
}
if (symbol.valueDeclaration === node) {
error(n, ts.Diagnostics.Parameter_0_cannot_be_referenced_in_its_initializer, ts.declarationNameToString(node.name));
return;
}
var enclosingContainer = ts.getEnclosingBlockScopeContainer(symbol.valueDeclaration);
if (enclosingContainer === func) {
if (symbol.valueDeclaration.kind === 146 ||
symbol.valueDeclaration.kind === 176) {
if (symbol.valueDeclaration.pos < node.pos) {
return;
}
if (ts.findAncestor(n, function (current) {
if (current === node.initializer) {
return "quit";
}
return ts.isFunctionLike(current.parent) ||
(current.parent.kind === 149 &&
!(ts.hasModifier(current.parent, 32)) &&
ts.isClassLike(current.parent.parent));
})) {
return;
}
}
error(n, ts.Diagnostics.Initializer_of_parameter_0_cannot_reference_identifier_1_declared_after_it, ts.declarationNameToString(node.name), ts.declarationNameToString(n));
}
}
else {
return ts.forEachChild(n, visit);
}
}
}
function convertAutoToAny(type) {
return type === autoType ? anyType : type === autoArrayType ? anyArrayType : type;
}
function checkVariableLikeDeclaration(node) {
checkDecorators(node);
checkSourceElement(node.type);
if (!node.name) {
return;
}
if (node.name.kind === 144) {
checkComputedPropertyName(node.name);
if (node.initializer) {
checkExpressionCached(node.initializer);
}
}
if (node.kind === 176) {
if (node.parent.kind === 174 && languageVersion < 5) {
checkExternalEmitHelpers(node, 4);
}
if (node.propertyName && node.propertyName.kind === 144) {
checkComputedPropertyName(node.propertyName);
}
var parent = node.parent.parent;
var parentType = getTypeForBindingElementParent(parent);
var name = node.propertyName || node.name;
var property = getPropertyOfType(parentType, ts.getTextOfPropertyName(name));
markPropertyAsReferenced(property, undefined, false);
if (parent.initializer && property) {
checkPropertyAccessibility(parent, parent.initializer, parentType, property);
}
}
if (ts.isBindingPattern(node.name)) {
if (node.name.kind === 175 && languageVersion < 2 && compilerOptions.downlevelIteration) {
checkExternalEmitHelpers(node, 512);
}
ts.forEach(node.name.elements, checkSourceElement);
}
if (node.initializer && ts.getRootDeclaration(node).kind === 146 && ts.nodeIsMissing(ts.getContainingFunction(node).body)) {
error(node, ts.Diagnostics.A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation);
return;
}
if (ts.isBindingPattern(node.name)) {
if (node.initializer && node.parent.parent.kind !== 215) {
checkTypeAssignableTo(checkExpressionCached(node.initializer), getWidenedTypeForVariableLikeDeclaration(node), node, undefined);
checkParameterInitializer(node);
}
return;
}
var symbol = getSymbolOfNode(node);
var type = convertAutoToAny(getTypeOfVariableOrParameterOrProperty(symbol));
if (node === symbol.valueDeclaration) {
if (node.initializer && node.parent.parent.kind !== 215) {
checkTypeAssignableTo(checkExpressionCached(node.initializer), type, node, undefined);
checkParameterInitializer(node);
}
}
else {
var declarationType = convertAutoToAny(getWidenedTypeForVariableLikeDeclaration(node));
if (type !== unknownType && declarationType !== unknownType && !isTypeIdenticalTo(type, declarationType)) {
error(node.name, ts.Diagnostics.Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2, ts.declarationNameToString(node.name), typeToString(type), typeToString(declarationType));
}
if (node.initializer) {
checkTypeAssignableTo(checkExpressionCached(node.initializer), declarationType, node, undefined);
}
if (!areDeclarationFlagsIdentical(node, symbol.valueDeclaration)) {
error(ts.getNameOfDeclaration(symbol.valueDeclaration), ts.Diagnostics.All_declarations_of_0_must_have_identical_modifiers, ts.declarationNameToString(node.name));
error(node.name, ts.Diagnostics.All_declarations_of_0_must_have_identical_modifiers, ts.declarationNameToString(node.name));
}
}
if (node.kind !== 149 && node.kind !== 148) {
checkExportsOnMergedDeclarations(node);
if (node.kind === 226 || node.kind === 176) {
checkVarDeclaredNamesNotShadowed(node);
}
checkCollisionWithCapturedSuperVariable(node, node.name);
checkCollisionWithCapturedThisVariable(node, node.name);
checkCollisionWithCapturedNewTargetVariable(node, node.name);
checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
}
}
function areDeclarationFlagsIdentical(left, right) {
if ((left.kind === 146 && right.kind === 226) ||
(left.kind === 226 && right.kind === 146)) {
return true;
}
if (ts.hasQuestionToken(left) !== ts.hasQuestionToken(right)) {
return false;
}
var interestingFlags = 8 |
16 |
256 |
128 |
64 |
32;
return ts.getSelectedModifierFlags(left, interestingFlags) === ts.getSelectedModifierFlags(right, interestingFlags);
}
function checkVariableDeclaration(node) {
checkGrammarVariableDeclaration(node);
return checkVariableLikeDeclaration(node);
}
function checkBindingElement(node) {
checkGrammarBindingElement(node);
return checkVariableLikeDeclaration(node);
}
function checkVariableStatement(node) {
checkGrammarDecorators(node) || checkGrammarModifiers(node) || checkGrammarVariableDeclarationList(node.declarationList) || checkGrammarForDisallowedLetOrConstStatement(node);
ts.forEach(node.declarationList.declarations, checkSourceElement);
}
function checkGrammarDisallowedModifiersOnObjectLiteralExpressionMethod(node) {
if (node.modifiers && node.parent.kind === 178) {
if (ts.getFunctionFlags(node) & 2) {
if (node.modifiers.length > 1) {
return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here);
}
}
else {
return grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here);
}
}
}
function checkExpressionStatement(node) {
checkGrammarStatementInAmbientContext(node);
checkExpression(node.expression);
}
function checkIfStatement(node) {
checkGrammarStatementInAmbientContext(node);
checkExpression(node.expression);
checkSourceElement(node.thenStatement);
if (node.thenStatement.kind === 209) {
error(node.thenStatement, ts.Diagnostics.The_body_of_an_if_statement_cannot_be_the_empty_statement);
}
checkSourceElement(node.elseStatement);
}
function checkDoStatement(node) {
checkGrammarStatementInAmbientContext(node);
checkSourceElement(node.statement);
checkExpression(node.expression);
}
function checkWhileStatement(node) {
checkGrammarStatementInAmbientContext(node);
checkExpression(node.expression);
checkSourceElement(node.statement);
}
function checkForStatement(node) {
if (!checkGrammarStatementInAmbientContext(node)) {
if (node.initializer && node.initializer.kind === 227) {
checkGrammarVariableDeclarationList(node.initializer);
}
}
if (node.initializer) {
if (node.initializer.kind === 227) {
ts.forEach(node.initializer.declarations, checkVariableDeclaration);
}
else {
checkExpression(node.initializer);
}
}
if (node.condition)
checkExpression(node.condition);
if (node.incrementor)
checkExpression(node.incrementor);
checkSourceElement(node.statement);
if (node.locals) {
registerForUnusedIdentifiersCheck(node);
}
}
function checkForOfStatement(node) {
checkGrammarForInOrForOfStatement(node);
if (node.kind === 216) {
if (node.awaitModifier) {
var functionFlags = ts.getFunctionFlags(ts.getContainingFunction(node));
if ((functionFlags & (4 | 2)) === 2 && languageVersion < 5) {
checkExternalEmitHelpers(node, 16384);
}
}
else if (compilerOptions.downlevelIteration && languageVersion < 2) {
checkExternalEmitHelpers(node, 256);
}
}
if (node.initializer.kind === 227) {
checkForInOrForOfVariableDeclaration(node);
}
else {
var varExpr = node.initializer;
var iteratedType = checkRightHandSideOfForOf(node.expression, node.awaitModifier);
if (varExpr.kind === 177 || varExpr.kind === 178) {
checkDestructuringAssignment(varExpr, iteratedType || unknownType);
}
else {
var leftType = checkExpression(varExpr);
checkReferenceExpression(varExpr, ts.Diagnostics.The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access);
if (iteratedType) {
checkTypeAssignableTo(iteratedType, leftType, varExpr, undefined);
}
}
}
checkSourceElement(node.statement);
if (node.locals) {
registerForUnusedIdentifiersCheck(node);
}
}
function checkForInStatement(node) {
checkGrammarForInOrForOfStatement(node);
var rightType = checkNonNullExpression(node.expression);
if (node.initializer.kind === 227) {
var variable = node.initializer.declarations[0];
if (variable && ts.isBindingPattern(variable.name)) {
error(variable.name, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern);
}
checkForInOrForOfVariableDeclaration(node);
}
else {
var varExpr = node.initializer;
var leftType = checkExpression(varExpr);
if (varExpr.kind === 177 || varExpr.kind === 178) {
error(varExpr, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern);
}
else if (!isTypeAssignableTo(getIndexTypeOrString(rightType), leftType)) {
error(varExpr, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any);
}
else {
checkReferenceExpression(varExpr, ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access);
}
}
if (!isTypeAssignableToKind(rightType, 16777216 | 540672)) {
error(node.expression, ts.Diagnostics.The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter);
}
checkSourceElement(node.statement);
if (node.locals) {
registerForUnusedIdentifiersCheck(node);
}
}
function checkForInOrForOfVariableDeclaration(iterationStatement) {
var variableDeclarationList = iterationStatement.initializer;
if (variableDeclarationList.declarations.length >= 1) {
var decl = variableDeclarationList.declarations[0];
checkVariableDeclaration(decl);
}
}
function checkRightHandSideOfForOf(rhsExpression, awaitModifier) {
var expressionType = checkNonNullExpression(rhsExpression);
return checkIteratedTypeOrElementType(expressionType, rhsExpression, true, awaitModifier !== undefined);
}
function checkIteratedTypeOrElementType(inputType, errorNode, allowStringInput, allowAsyncIterables) {
if (isTypeAny(inputType)) {
return inputType;
}
return getIteratedTypeOrElementType(inputType, errorNode, allowStringInput, allowAsyncIterables, true) || anyType;
}
function getIteratedTypeOrElementType(inputType, errorNode, allowStringInput, allowAsyncIterables, checkAssignability) {
var uplevelIteration = languageVersion >= 2;
var downlevelIteration = !uplevelIteration && compilerOptions.downlevelIteration;
if (uplevelIteration || downlevelIteration || allowAsyncIterables) {
var iteratedType = getIteratedTypeOfIterable(inputType, uplevelIteration ? errorNode : undefined, allowAsyncIterables, true, checkAssignability);
if (iteratedType || uplevelIteration) {
return iteratedType;
}
}
var arrayType = inputType;
var reportedError = false;
var hasStringConstituent = false;
if (allowStringInput) {
if (arrayType.flags & 65536) {
var arrayTypes = inputType.types;
var filteredTypes = ts.filter(arrayTypes, function (t) { return !(t.flags & 262178); });
if (filteredTypes !== arrayTypes) {
arrayType = getUnionType(filteredTypes, true);
}
}
else if (arrayType.flags & 262178) {
arrayType = neverType;
}
hasStringConstituent = arrayType !== inputType;
if (hasStringConstituent) {
if (languageVersion < 1) {
if (errorNode) {
error(errorNode, ts.Diagnostics.Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher);
reportedError = true;
}
}
if (arrayType.flags & 8192) {
return stringType;
}
}
}
if (!isArrayLikeType(arrayType)) {
if (errorNode && !reportedError) {
var diagnostic = !allowStringInput || hasStringConstituent
? downlevelIteration
? ts.Diagnostics.Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator
: ts.Diagnostics.Type_0_is_not_an_array_type
: downlevelIteration
? ts.Diagnostics.Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator
: ts.Diagnostics.Type_0_is_not_an_array_type_or_a_string_type;
error(errorNode, diagnostic, typeToString(arrayType));
}
return hasStringConstituent ? stringType : undefined;
}
var arrayElementType = getIndexTypeOfType(arrayType, 1);
if (hasStringConstituent && arrayElementType) {
if (arrayElementType.flags & 262178) {
return stringType;
}
return getUnionType([arrayElementType, stringType], true);
}
return arrayElementType;
}
function getIteratedTypeOfIterable(type, errorNode, allowAsyncIterables, allowSyncIterables, checkAssignability) {
if (isTypeAny(type)) {
return undefined;
}
return mapType(type, getIteratedType);
function getIteratedType(type) {
var typeAsIterable = type;
if (allowAsyncIterables) {
if (typeAsIterable.iteratedTypeOfAsyncIterable) {
return typeAsIterable.iteratedTypeOfAsyncIterable;
}
if (isReferenceToType(type, getGlobalAsyncIterableType(false)) ||
isReferenceToType(type, getGlobalAsyncIterableIteratorType(false))) {
return typeAsIterable.iteratedTypeOfAsyncIterable = type.typeArguments[0];
}
}
if (allowSyncIterables) {
if (typeAsIterable.iteratedTypeOfIterable) {
return typeAsIterable.iteratedTypeOfIterable;
}
if (isReferenceToType(type, getGlobalIterableType(false)) ||
isReferenceToType(type, getGlobalIterableIteratorType(false))) {
return typeAsIterable.iteratedTypeOfIterable = type.typeArguments[0];
}
}
var asyncMethodType = allowAsyncIterables && getTypeOfPropertyOfType(type, ts.getPropertyNameForKnownSymbolName("asyncIterator"));
var methodType = asyncMethodType || (allowSyncIterables && getTypeOfPropertyOfType(type, ts.getPropertyNameForKnownSymbolName("iterator")));
if (isTypeAny(methodType)) {
return undefined;
}
var signatures = methodType && getSignaturesOfType(methodType, 0);
if (!ts.some(signatures)) {
if (errorNode) {
error(errorNode, allowAsyncIterables
? ts.Diagnostics.Type_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator
: ts.Diagnostics.Type_must_have_a_Symbol_iterator_method_that_returns_an_iterator);
errorNode = undefined;
}
return undefined;
}
var returnType = getUnionType(ts.map(signatures, getReturnTypeOfSignature), true);
var iteratedType = getIteratedTypeOfIterator(returnType, errorNode, !!asyncMethodType);
if (checkAssignability && errorNode && iteratedType) {
checkTypeAssignableTo(type, asyncMethodType
? createAsyncIterableType(iteratedType)
: createIterableType(iteratedType), errorNode);
}
return asyncMethodType
? typeAsIterable.iteratedTypeOfAsyncIterable = iteratedType
: typeAsIterable.iteratedTypeOfIterable = iteratedType;
}
}
function getIteratedTypeOfIterator(type, errorNode, isAsyncIterator) {
if (isTypeAny(type)) {
return undefined;
}
var typeAsIterator = type;
if (isAsyncIterator ? typeAsIterator.iteratedTypeOfAsyncIterator : typeAsIterator.iteratedTypeOfIterator) {
return isAsyncIterator ? typeAsIterator.iteratedTypeOfAsyncIterator : typeAsIterator.iteratedTypeOfIterator;
}
var getIteratorType = isAsyncIterator ? getGlobalAsyncIteratorType : getGlobalIteratorType;
if (isReferenceToType(type, getIteratorType(false))) {
return isAsyncIterator
? typeAsIterator.iteratedTypeOfAsyncIterator = type.typeArguments[0]
: typeAsIterator.iteratedTypeOfIterator = type.typeArguments[0];
}
var nextMethod = getTypeOfPropertyOfType(type, "next");
if (isTypeAny(nextMethod)) {
return undefined;
}
var nextMethodSignatures = nextMethod ? getSignaturesOfType(nextMethod, 0) : ts.emptyArray;
if (nextMethodSignatures.length === 0) {
if (errorNode) {
error(errorNode, isAsyncIterator
? ts.Diagnostics.An_async_iterator_must_have_a_next_method
: ts.Diagnostics.An_iterator_must_have_a_next_method);
}
return undefined;
}
var nextResult = getUnionType(ts.map(nextMethodSignatures, getReturnTypeOfSignature), true);
if (isTypeAny(nextResult)) {
return undefined;
}
if (isAsyncIterator) {
nextResult = getAwaitedTypeOfPromise(nextResult, errorNode, ts.Diagnostics.The_type_returned_by_the_next_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_property);
if (isTypeAny(nextResult)) {
return undefined;
}
}
var nextValue = nextResult && getTypeOfPropertyOfType(nextResult, "value");
if (!nextValue) {
if (errorNode) {
error(errorNode, isAsyncIterator
? ts.Diagnostics.The_type_returned_by_the_next_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_property
: ts.Diagnostics.The_type_returned_by_the_next_method_of_an_iterator_must_have_a_value_property);
}
return undefined;
}
return isAsyncIterator
? typeAsIterator.iteratedTypeOfAsyncIterator = nextValue
: typeAsIterator.iteratedTypeOfIterator = nextValue;
}
function getIteratedTypeOfGenerator(returnType, isAsyncGenerator) {
if (isTypeAny(returnType)) {
return undefined;
}
return getIteratedTypeOfIterable(returnType, undefined, isAsyncGenerator, !isAsyncGenerator, false)
|| getIteratedTypeOfIterator(returnType, undefined, isAsyncGenerator);
}
function checkBreakOrContinueStatement(node) {
checkGrammarStatementInAmbientContext(node) || checkGrammarBreakOrContinueStatement(node);
}
function isGetAccessorWithAnnotatedSetAccessor(node) {
return node.kind === 153
&& ts.getEffectiveSetAccessorTypeAnnotationNode(ts.getDeclarationOfKind(node.symbol, 154)) !== undefined;
}
function isUnwrappedReturnTypeVoidOrAny(func, returnType) {
var unwrappedReturnType = (ts.getFunctionFlags(func) & 3) === 2
? getPromisedTypeOfPromise(returnType)
: returnType;
return unwrappedReturnType && maybeTypeOfKind(unwrappedReturnType, 1024 | 1);
}
function checkReturnStatement(node) {
if (!checkGrammarStatementInAmbientContext(node)) {
var functionBlock = ts.getContainingFunction(node);
if (!functionBlock) {
grammarErrorOnFirstToken(node, ts.Diagnostics.A_return_statement_can_only_be_used_within_a_function_body);
}
}
var func = ts.getContainingFunction(node);
if (func) {
var signature = getSignatureFromDeclaration(func);
var returnType = getReturnTypeOfSignature(signature);
if (strictNullChecks || node.expression || returnType.flags & 8192) {
var exprType = node.expression ? checkExpressionCached(node.expression) : undefinedType;
var functionFlags = ts.getFunctionFlags(func);
if (functionFlags & 1) {
return;
}
if (func.kind === 154) {
if (node.expression) {
error(node, ts.Diagnostics.Setters_cannot_return_a_value);
}
}
else if (func.kind === 152) {
if (node.expression && !checkTypeAssignableTo(exprType, returnType, node)) {
error(node, ts.Diagnostics.Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class);
}
}
else if (ts.getEffectiveReturnTypeNode(func) || isGetAccessorWithAnnotatedSetAccessor(func)) {
if (functionFlags & 2) {
var promisedType = getPromisedTypeOfPromise(returnType);
var awaitedType = checkAwaitedType(exprType, node, ts.Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member);
if (promisedType) {
checkTypeAssignableTo(awaitedType, promisedType, node);
}
}
else {
checkTypeAssignableTo(exprType, returnType, node);
}
}
}
else if (func.kind !== 152 && compilerOptions.noImplicitReturns && !isUnwrappedReturnTypeVoidOrAny(func, returnType)) {
error(node, ts.Diagnostics.Not_all_code_paths_return_a_value);
}
}
}
function checkWithStatement(node) {
if (!checkGrammarStatementInAmbientContext(node)) {
if (node.flags & 16384) {
grammarErrorOnFirstToken(node, ts.Diagnostics.with_statements_are_not_allowed_in_an_async_function_block);
}
}
checkExpression(node.expression);
var sourceFile = ts.getSourceFileOfNode(node);
if (!hasParseDiagnostics(sourceFile)) {
var start = ts.getSpanOfTokenAtPosition(sourceFile, node.pos).start;
var end = node.statement.pos;
grammarErrorAtPos(sourceFile, start, end - start, ts.Diagnostics.The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any);
}
}
function checkSwitchStatement(node) {
checkGrammarStatementInAmbientContext(node);
var firstDefaultClause;
var hasDuplicateDefaultClause = false;
var expressionType = checkExpression(node.expression);
var expressionIsLiteral = isLiteralType(expressionType);
ts.forEach(node.caseBlock.clauses, function (clause) {
if (clause.kind === 258 && !hasDuplicateDefaultClause) {
if (firstDefaultClause === undefined) {
firstDefaultClause = clause;
}
else {
var sourceFile = ts.getSourceFileOfNode(node);
var start = ts.skipTrivia(sourceFile.text, clause.pos);
var end = clause.statements.length > 0 ? clause.statements[0].pos : clause.end;
grammarErrorAtPos(sourceFile, start, end - start, ts.Diagnostics.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement);
hasDuplicateDefaultClause = true;
}
}
if (produceDiagnostics && clause.kind === 257) {
var caseClause = clause;
var caseType = checkExpression(caseClause.expression);
var caseIsLiteral = isLiteralType(caseType);
var comparedExpressionType = expressionType;
if (!caseIsLiteral || !expressionIsLiteral) {
caseType = caseIsLiteral ? getBaseTypeOfLiteralType(caseType) : caseType;
comparedExpressionType = getBaseTypeOfLiteralType(expressionType);
}
if (!isTypeEqualityComparableTo(comparedExpressionType, caseType)) {
checkTypeComparableTo(caseType, comparedExpressionType, caseClause.expression, undefined);
}
}
ts.forEach(clause.statements, checkSourceElement);
});
if (node.caseBlock.locals) {
registerForUnusedIdentifiersCheck(node.caseBlock);
}
}
function checkLabeledStatement(node) {
if (!checkGrammarStatementInAmbientContext(node)) {
ts.findAncestor(node.parent, function (current) {
if (ts.isFunctionLike(current)) {
return "quit";
}
if (current.kind === 222 && current.label.escapedText === node.label.escapedText) {
var sourceFile = ts.getSourceFileOfNode(node);
grammarErrorOnNode(node.label, ts.Diagnostics.Duplicate_label_0, ts.getTextOfNodeFromSourceText(sourceFile.text, node.label));
return true;
}
});
}
checkSourceElement(node.statement);
}
function checkThrowStatement(node) {
if (!checkGrammarStatementInAmbientContext(node)) {
if (node.expression === undefined) {
grammarErrorAfterFirstToken(node, ts.Diagnostics.Line_break_not_permitted_here);
}
}
if (node.expression) {
checkExpression(node.expression);
}
}
function checkTryStatement(node) {
checkGrammarStatementInAmbientContext(node);
checkBlock(node.tryBlock);
var catchClause = node.catchClause;
if (catchClause) {
if (catchClause.variableDeclaration) {
if (catchClause.variableDeclaration.type) {
grammarErrorOnFirstToken(catchClause.variableDeclaration.type, ts.Diagnostics.Catch_clause_variable_cannot_have_a_type_annotation);
}
else if (catchClause.variableDeclaration.initializer) {
grammarErrorOnFirstToken(catchClause.variableDeclaration.initializer, ts.Diagnostics.Catch_clause_variable_cannot_have_an_initializer);
}
else {
var blockLocals_1 = catchClause.block.locals;
if (blockLocals_1) {
ts.forEachKey(catchClause.locals, function (caughtName) {
var blockLocal = blockLocals_1.get(caughtName);
if (blockLocal && (blockLocal.flags & 2) !== 0) {
grammarErrorOnNode(blockLocal.valueDeclaration, ts.Diagnostics.Cannot_redeclare_identifier_0_in_catch_clause, caughtName);
}
});
}
}
}
checkBlock(catchClause.block);
}
if (node.finallyBlock) {
checkBlock(node.finallyBlock);
}
}
function checkIndexConstraints(type) {
var declaredNumberIndexer = getIndexDeclarationOfSymbol(type.symbol, 1);
var declaredStringIndexer = getIndexDeclarationOfSymbol(type.symbol, 0);
var stringIndexType = getIndexTypeOfType(type, 0);
var numberIndexType = getIndexTypeOfType(type, 1);
if (stringIndexType || numberIndexType) {
ts.forEach(getPropertiesOfObjectType(type), function (prop) {
var propType = getTypeOfSymbol(prop);
checkIndexConstraintForProperty(prop, propType, type, declaredStringIndexer, stringIndexType, 0);
checkIndexConstraintForProperty(prop, propType, type, declaredNumberIndexer, numberIndexType, 1);
});
if (getObjectFlags(type) & 1 && ts.isClassLike(type.symbol.valueDeclaration)) {
var classDeclaration = type.symbol.valueDeclaration;
for (var _i = 0, _a = classDeclaration.members; _i < _a.length; _i++) {
var member = _a[_i];
if (!ts.hasModifier(member, 32) && ts.hasDynamicName(member)) {
var propType = getTypeOfSymbol(member.symbol);
checkIndexConstraintForProperty(member.symbol, propType, type, declaredStringIndexer, stringIndexType, 0);
checkIndexConstraintForProperty(member.symbol, propType, type, declaredNumberIndexer, numberIndexType, 1);
}
}
}
}
var errorNode;
if (stringIndexType && numberIndexType) {
errorNode = declaredNumberIndexer || declaredStringIndexer;
if (!errorNode && (getObjectFlags(type) & 2)) {
var someBaseTypeHasBothIndexers = ts.forEach(getBaseTypes(type), function (base) { return getIndexTypeOfType(base, 0) && getIndexTypeOfType(base, 1); });
errorNode = someBaseTypeHasBothIndexers ? undefined : type.symbol.declarations[0];
}
}
if (errorNode && !isTypeAssignableTo(numberIndexType, stringIndexType)) {
error(errorNode, ts.Diagnostics.Numeric_index_type_0_is_not_assignable_to_string_index_type_1, typeToString(numberIndexType), typeToString(stringIndexType));
}
function checkIndexConstraintForProperty(prop, propertyType, containingType, indexDeclaration, indexType, indexKind) {
if (!indexType) {
return;
}
var propDeclaration = prop.valueDeclaration;
if (indexKind === 1 && !(propDeclaration ? isNumericName(ts.getNameOfDeclaration(propDeclaration)) : isNumericLiteralName(prop.escapedName))) {
return;
}
var errorNode;
if (propDeclaration &&
(propDeclaration.kind === 194 ||
ts.getNameOfDeclaration(propDeclaration).kind === 144 ||
prop.parent === containingType.symbol)) {
errorNode = propDeclaration;
}
else if (indexDeclaration) {
errorNode = indexDeclaration;
}
else if (getObjectFlags(containingType) & 2) {
var someBaseClassHasBothPropertyAndIndexer = ts.forEach(getBaseTypes(containingType), function (base) { return getPropertyOfObjectType(base, prop.escapedName) && getIndexTypeOfType(base, indexKind); });
errorNode = someBaseClassHasBothPropertyAndIndexer ? undefined : containingType.symbol.declarations[0];
}
if (errorNode && !isTypeAssignableTo(propertyType, indexType)) {
var errorMessage = indexKind === 0
? ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_string_index_type_2
: ts.Diagnostics.Property_0_of_type_1_is_not_assignable_to_numeric_index_type_2;
error(errorNode, errorMessage, symbolToString(prop), typeToString(propertyType), typeToString(indexType));
}
}
}
function checkTypeNameIsReserved(name, message) {
switch (name.escapedText) {
case "any":
case "number":
case "boolean":
case "string":
case "symbol":
case "void":
case "object":
error(name, message, name.escapedText);
}
}
function checkTypeParameters(typeParameterDeclarations) {
if (typeParameterDeclarations) {
var seenDefault = false;
for (var i = 0; i < typeParameterDeclarations.length; i++) {
var node = typeParameterDeclarations[i];
checkTypeParameter(node);
if (produceDiagnostics) {
if (node.default) {
seenDefault = true;
}
else if (seenDefault) {
error(node, ts.Diagnostics.Required_type_parameters_may_not_follow_optional_type_parameters);
}
for (var j = 0; j < i; j++) {
if (typeParameterDeclarations[j].symbol === node.symbol) {
error(node.name, ts.Diagnostics.Duplicate_identifier_0, ts.declarationNameToString(node.name));
}
}
}
}
}
}
function checkTypeParameterListsIdentical(symbol) {
if (symbol.declarations.length === 1) {
return;
}
var links = getSymbolLinks(symbol);
if (!links.typeParametersChecked) {
links.typeParametersChecked = true;
var declarations = getClassOrInterfaceDeclarationsOfSymbol(symbol);
if (declarations.length <= 1) {
return;
}
var type = getDeclaredTypeOfSymbol(symbol);
if (!areTypeParametersIdentical(declarations, type.localTypeParameters)) {
var name = symbolToString(symbol);
for (var _i = 0, declarations_5 = declarations; _i < declarations_5.length; _i++) {
var declaration = declarations_5[_i];
error(declaration.name, ts.Diagnostics.All_declarations_of_0_must_have_identical_type_parameters, name);
}
}
}
}
function areTypeParametersIdentical(declarations, typeParameters) {
var maxTypeArgumentCount = ts.length(typeParameters);
var minTypeArgumentCount = getMinTypeArgumentCount(typeParameters);
for (var _i = 0, declarations_6 = declarations; _i < declarations_6.length; _i++) {
var declaration = declarations_6[_i];
var numTypeParameters = ts.length(declaration.typeParameters);
if (numTypeParameters < minTypeArgumentCount || numTypeParameters > maxTypeArgumentCount) {
return false;
}
for (var i = 0; i < numTypeParameters; i++) {
var source = declaration.typeParameters[i];
var target = typeParameters[i];
if (source.name.escapedText !== target.symbol.escapedName) {
return false;
}
var sourceConstraint = source.constraint && getTypeFromTypeNode(source.constraint);
var targetConstraint = getConstraintFromTypeParameter(target);
if ((sourceConstraint || targetConstraint) &&
(!sourceConstraint || !targetConstraint || !isTypeIdenticalTo(sourceConstraint, targetConstraint))) {
return false;
}
var sourceDefault = source.default && getTypeFromTypeNode(source.default);
var targetDefault = getDefaultFromTypeParameter(target);
if (sourceDefault && targetDefault && !isTypeIdenticalTo(sourceDefault, targetDefault)) {
return false;
}
}
}
return true;
}
function checkClassExpression(node) {
checkClassLikeDeclaration(node);
checkNodeDeferred(node);
return getTypeOfSymbol(getSymbolOfNode(node));
}
function checkClassExpressionDeferred(node) {
ts.forEach(node.members, checkSourceElement);
registerForUnusedIdentifiersCheck(node);
}
function checkClassDeclaration(node) {
if (!node.name && !ts.hasModifier(node, 512)) {
grammarErrorOnFirstToken(node, ts.Diagnostics.A_class_declaration_without_the_default_modifier_must_have_a_name);
}
checkClassLikeDeclaration(node);
ts.forEach(node.members, checkSourceElement);
registerForUnusedIdentifiersCheck(node);
}
function checkClassLikeDeclaration(node) {
checkGrammarClassLikeDeclaration(node);
checkDecorators(node);
if (node.name) {
checkTypeNameIsReserved(node.name, ts.Diagnostics.Class_name_cannot_be_0);
checkCollisionWithCapturedThisVariable(node, node.name);
checkCollisionWithCapturedNewTargetVariable(node, node.name);
checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
}
checkTypeParameters(node.typeParameters);
checkExportsOnMergedDeclarations(node);
var symbol = getSymbolOfNode(node);
var type = getDeclaredTypeOfSymbol(symbol);
var typeWithThis = getTypeWithThisArgument(type);
var staticType = getTypeOfSymbol(symbol);
checkTypeParameterListsIdentical(symbol);
checkClassForDuplicateDeclarations(node);
if (!ts.isInAmbientContext(node)) {
checkClassForStaticPropertyNameConflicts(node);
}
var baseTypeNode = ts.getClassExtendsHeritageClauseElement(node);
if (baseTypeNode) {
if (languageVersion < 2) {
checkExternalEmitHelpers(baseTypeNode.parent, 1);
}
var baseTypes = getBaseTypes(type);
if (baseTypes.length && produceDiagnostics) {
var baseType_1 = baseTypes[0];
var baseConstructorType = getBaseConstructorTypeOfClass(type);
var staticBaseType = getApparentType(baseConstructorType);
checkBaseTypeAccessibility(staticBaseType, baseTypeNode);
checkSourceElement(baseTypeNode.expression);
if (ts.some(baseTypeNode.typeArguments)) {
ts.forEach(baseTypeNode.typeArguments, checkSourceElement);
for (var _i = 0, _a = getConstructorsForTypeArguments(staticBaseType, baseTypeNode.typeArguments, baseTypeNode); _i < _a.length; _i++) {
var constructor = _a[_i];
if (!checkTypeArgumentConstraints(constructor.typeParameters, baseTypeNode.typeArguments)) {
break;
}
}
}
checkTypeAssignableTo(typeWithThis, getTypeWithThisArgument(baseType_1, type.thisType), node.name || node, ts.Diagnostics.Class_0_incorrectly_extends_base_class_1);
checkTypeAssignableTo(staticType, getTypeWithoutSignatures(staticBaseType), node.name || node, ts.Diagnostics.Class_static_side_0_incorrectly_extends_base_class_static_side_1);
if (baseConstructorType.flags & 540672 && !isMixinConstructorType(staticType)) {
error(node.name || node, ts.Diagnostics.A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any);
}
if (!(staticBaseType.symbol && staticBaseType.symbol.flags & 32) && !(baseConstructorType.flags & 540672)) {
var constructors = getInstantiatedConstructorsForTypeArguments(staticBaseType, baseTypeNode.typeArguments, baseTypeNode);
if (ts.forEach(constructors, function (sig) { return getReturnTypeOfSignature(sig) !== baseType_1; })) {
error(baseTypeNode.expression, ts.Diagnostics.Base_constructors_must_all_have_the_same_return_type);
}
}
checkKindsOfPropertyMemberOverrides(type, baseType_1);
}
}
var implementedTypeNodes = ts.getClassImplementsHeritageClauseElements(node);
if (implementedTypeNodes) {
for (var _b = 0, implementedTypeNodes_1 = implementedTypeNodes; _b < implementedTypeNodes_1.length; _b++) {
var typeRefNode = implementedTypeNodes_1[_b];
if (!ts.isEntityNameExpression(typeRefNode.expression)) {
error(typeRefNode.expression, ts.Diagnostics.A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments);
}
checkTypeReferenceNode(typeRefNode);
if (produceDiagnostics) {
var t = getTypeFromTypeNode(typeRefNode);
if (t !== unknownType) {
if (isValidBaseType(t)) {
checkTypeAssignableTo(typeWithThis, getTypeWithThisArgument(t, type.thisType), node.name || node, ts.Diagnostics.Class_0_incorrectly_implements_interface_1);
}
else {
error(typeRefNode, ts.Diagnostics.A_class_may_only_implement_another_class_or_interface);
}
}
}
}
}
if (produceDiagnostics) {
checkIndexConstraints(type);
checkTypeForDuplicateIndexSignatures(node);
}
}
function checkBaseTypeAccessibility(type, node) {
var signatures = getSignaturesOfType(type, 1);
if (signatures.length) {
var declaration = signatures[0].declaration;
if (declaration && ts.hasModifier(declaration, 8)) {
var typeClassDeclaration = getClassLikeDeclarationOfSymbol(type.symbol);
if (!isNodeWithinClass(node, typeClassDeclaration)) {
error(node, ts.Diagnostics.Cannot_extend_a_class_0_Class_constructor_is_marked_as_private, getFullyQualifiedName(type.symbol));
}
}
}
}
function getTargetSymbol(s) {
return ts.getCheckFlags(s) & 1 ? s.target : s;
}
function getClassLikeDeclarationOfSymbol(symbol) {
return ts.forEach(symbol.declarations, function (d) { return ts.isClassLike(d) ? d : undefined; });
}
function getClassOrInterfaceDeclarationsOfSymbol(symbol) {
return ts.filter(symbol.declarations, function (d) {
return d.kind === 229 || d.kind === 230;
});
}
function checkKindsOfPropertyMemberOverrides(type, baseType) {
var baseProperties = getPropertiesOfType(baseType);
for (var _i = 0, baseProperties_1 = baseProperties; _i < baseProperties_1.length; _i++) {
var baseProperty = baseProperties_1[_i];
var base = getTargetSymbol(baseProperty);
if (base.flags & 4194304) {
continue;
}
var derived = getTargetSymbol(getPropertyOfObjectType(type, base.escapedName));
var baseDeclarationFlags = ts.getDeclarationModifierFlagsFromSymbol(base);
ts.Debug.assert(!!derived, "derived should point to something, even if it is the base class' declaration.");
if (derived) {
if (derived === base) {
var derivedClassDecl = getClassLikeDeclarationOfSymbol(type.symbol);
if (baseDeclarationFlags & 128 && (!derivedClassDecl || !ts.hasModifier(derivedClassDecl, 128))) {
if (derivedClassDecl.kind === 199) {
error(derivedClassDecl, ts.Diagnostics.Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1, symbolToString(baseProperty), typeToString(baseType));
}
else {
error(derivedClassDecl, ts.Diagnostics.Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2, typeToString(type), symbolToString(baseProperty), typeToString(baseType));
}
}
}
else {
var derivedDeclarationFlags = ts.getDeclarationModifierFlagsFromSymbol(derived);
if (baseDeclarationFlags & 8 || derivedDeclarationFlags & 8) {
continue;
}
if (isMethodLike(base) && isMethodLike(derived) || base.flags & 98308 && derived.flags & 98308) {
continue;
}
var errorMessage = void 0;
if (isMethodLike(base)) {
if (derived.flags & 98304) {
errorMessage = ts.Diagnostics.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor;
}
else {
errorMessage = ts.Diagnostics.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_property;
}
}
else if (base.flags & 4) {
errorMessage = ts.Diagnostics.Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function;
}
else {
errorMessage = ts.Diagnostics.Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function;
}
error(ts.getNameOfDeclaration(derived.valueDeclaration) || derived.valueDeclaration, errorMessage, typeToString(baseType), symbolToString(base), typeToString(type));
}
}
}
}
function checkInheritedPropertiesAreIdentical(type, typeNode) {
var baseTypes = getBaseTypes(type);
if (baseTypes.length < 2) {
return true;
}
var seen = ts.createUnderscoreEscapedMap();
ts.forEach(resolveDeclaredMembers(type).declaredProperties, function (p) { seen.set(p.escapedName, { prop: p, containingType: type }); });
var ok = true;
for (var _i = 0, baseTypes_2 = baseTypes; _i < baseTypes_2.length; _i++) {
var base = baseTypes_2[_i];
var properties = getPropertiesOfType(getTypeWithThisArgument(base, type.thisType));
for (var _a = 0, properties_8 = properties; _a < properties_8.length; _a++) {
var prop = properties_8[_a];
var existing = seen.get(prop.escapedName);
if (!existing) {
seen.set(prop.escapedName, { prop: prop, containingType: base });
}
else {
var isInheritedProperty = existing.containingType !== type;
if (isInheritedProperty && !isPropertyIdenticalTo(existing.prop, prop)) {
ok = false;
var typeName1 = typeToString(existing.containingType);
var typeName2 = typeToString(base);
var errorInfo = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.Named_property_0_of_types_1_and_2_are_not_identical, symbolToString(prop), typeName1, typeName2);
errorInfo = ts.chainDiagnosticMessages(errorInfo, ts.Diagnostics.Interface_0_cannot_simultaneously_extend_types_1_and_2, typeToString(type), typeName1, typeName2);
diagnostics.add(ts.createDiagnosticForNodeFromMessageChain(typeNode, errorInfo));
}
}
}
}
return ok;
}
function checkInterfaceDeclaration(node) {
checkGrammarDecorators(node) || checkGrammarModifiers(node) || checkGrammarInterfaceDeclaration(node);
checkTypeParameters(node.typeParameters);
if (produceDiagnostics) {
checkTypeNameIsReserved(node.name, ts.Diagnostics.Interface_name_cannot_be_0);
checkExportsOnMergedDeclarations(node);
var symbol = getSymbolOfNode(node);
checkTypeParameterListsIdentical(symbol);
var firstInterfaceDecl = ts.getDeclarationOfKind(symbol, 230);
if (node === firstInterfaceDecl) {
var type = getDeclaredTypeOfSymbol(symbol);
var typeWithThis = getTypeWithThisArgument(type);
if (checkInheritedPropertiesAreIdentical(type, node.name)) {
for (var _i = 0, _a = getBaseTypes(type); _i < _a.length; _i++) {
var baseType = _a[_i];
checkTypeAssignableTo(typeWithThis, getTypeWithThisArgument(baseType, type.thisType), node.name, ts.Diagnostics.Interface_0_incorrectly_extends_interface_1);
}
checkIndexConstraints(type);
}
}
checkObjectTypeForDuplicateDeclarations(node);
}
ts.forEach(ts.getInterfaceBaseTypeNodes(node), function (heritageElement) {
if (!ts.isEntityNameExpression(heritageElement.expression)) {
error(heritageElement.expression, ts.Diagnostics.An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments);
}
checkTypeReferenceNode(heritageElement);
});
ts.forEach(node.members, checkSourceElement);
if (produceDiagnostics) {
checkTypeForDuplicateIndexSignatures(node);
registerForUnusedIdentifiersCheck(node);
}
}
function checkTypeAliasDeclaration(node) {
checkGrammarDecorators(node) || checkGrammarModifiers(node);
checkTypeNameIsReserved(node.name, ts.Diagnostics.Type_alias_name_cannot_be_0);
checkTypeParameters(node.typeParameters);
checkSourceElement(node.type);
registerForUnusedIdentifiersCheck(node);
}
function computeEnumMemberValues(node) {
var nodeLinks = getNodeLinks(node);
if (!(nodeLinks.flags & 16384)) {
nodeLinks.flags |= 16384;
var autoValue = 0;
for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
var member = _a[_i];
var value = computeMemberValue(member, autoValue);
getNodeLinks(member).enumMemberValue = value;
autoValue = typeof value === "number" ? value + 1 : undefined;
}
}
}
function computeMemberValue(member, autoValue) {
if (isComputedNonLiteralName(member.name)) {
error(member.name, ts.Diagnostics.Computed_property_names_are_not_allowed_in_enums);
}
else {
var text = ts.getTextOfPropertyName(member.name);
if (isNumericLiteralName(text) && !isInfinityOrNaNString(text)) {
error(member.name, ts.Diagnostics.An_enum_member_cannot_have_a_numeric_name);
}
}
if (member.initializer) {
return computeConstantValue(member);
}
if (ts.isInAmbientContext(member.parent) && !ts.isConst(member.parent)) {
return undefined;
}
if (autoValue !== undefined) {
return autoValue;
}
error(member.name, ts.Diagnostics.Enum_member_must_have_initializer);
return undefined;
}
function computeConstantValue(member) {
var enumKind = getEnumKind(getSymbolOfNode(member.parent));
var isConstEnum = ts.isConst(member.parent);
var initializer = member.initializer;
var value = enumKind === 1 && !isLiteralEnumMember(member) ? undefined : evaluate(initializer);
if (value !== undefined) {
if (isConstEnum && typeof value === "number" && !isFinite(value)) {
error(initializer, isNaN(value) ?
ts.Diagnostics.const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN :
ts.Diagnostics.const_enum_member_initializer_was_evaluated_to_a_non_finite_value);
}
}
else if (enumKind === 1) {
error(initializer, ts.Diagnostics.Computed_values_are_not_permitted_in_an_enum_with_string_valued_members);
return 0;
}
else if (isConstEnum) {
error(initializer, ts.Diagnostics.In_const_enum_declarations_member_initializer_must_be_constant_expression);
}
else if (ts.isInAmbientContext(member.parent)) {
error(initializer, ts.Diagnostics.In_ambient_enum_declarations_member_initializer_must_be_constant_expression);
}
else {
checkTypeAssignableTo(checkExpression(initializer), getDeclaredTypeOfSymbol(getSymbolOfNode(member.parent)), initializer, undefined);
}
return value;
function evaluate(expr) {
switch (expr.kind) {
case 192:
var value_1 = evaluate(expr.operand);
if (typeof value_1 === "number") {
switch (expr.operator) {
case 37: return value_1;
case 38: return -value_1;
case 52: return ~value_1;
}
}
break;
case 194:
var left = evaluate(expr.left);
var right = evaluate(expr.right);
if (typeof left === "number" && typeof right === "number") {
switch (expr.operatorToken.kind) {
case 49: return left | right;
case 48: return left & right;
case 46: return left >> right;
case 47: return left >>> right;
case 45: return left << right;
case 50: return left ^ right;
case 39: return left * right;
case 41: return left / right;
case 37: return left + right;
case 38: return left - right;
case 42: return left % right;
}
}
break;
case 9:
return expr.text;
case 8:
checkGrammarNumericLiteral(expr);
return +expr.text;
case 185:
return evaluate(expr.expression);
case 71:
return ts.nodeIsMissing(expr) ? 0 : evaluateEnumMember(expr, getSymbolOfNode(member.parent), expr.escapedText);
case 180:
case 179:
var ex = expr;
if (isConstantMemberAccess(ex)) {
var type = getTypeOfExpression(ex.expression);
if (type.symbol && type.symbol.flags & 384) {
var name = void 0;
if (ex.kind === 179) {
name = ex.name.escapedText;
}
else {
var argument = ex.argumentExpression;
ts.Debug.assert(ts.isLiteralExpression(argument));
name = ts.escapeLeadingUnderscores(argument.text);
}
return evaluateEnumMember(expr, type.symbol, name);
}
}
break;
}
return undefined;
}
function evaluateEnumMember(expr, enumSymbol, name) {
var memberSymbol = enumSymbol.exports.get(name);
if (memberSymbol) {
var declaration = memberSymbol.valueDeclaration;
if (declaration !== member) {
if (isBlockScopedNameDeclaredBeforeUse(declaration, member)) {
return getNodeLinks(declaration).enumMemberValue;
}
error(expr, ts.Diagnostics.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums);
return 0;
}
}
return undefined;
}
}
function isConstantMemberAccess(node) {
return node.kind === 71 ||
node.kind === 179 && isConstantMemberAccess(node.expression) ||
node.kind === 180 && isConstantMemberAccess(node.expression) &&
node.argumentExpression.kind === 9;
}
function checkEnumDeclaration(node) {
if (!produceDiagnostics) {
return;
}
checkGrammarDecorators(node) || checkGrammarModifiers(node);
checkTypeNameIsReserved(node.name, ts.Diagnostics.Enum_name_cannot_be_0);
checkCollisionWithCapturedThisVariable(node, node.name);
checkCollisionWithCapturedNewTargetVariable(node, node.name);
checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
checkExportsOnMergedDeclarations(node);
computeEnumMemberValues(node);
var enumIsConst = ts.isConst(node);
if (compilerOptions.isolatedModules && enumIsConst && ts.isInAmbientContext(node)) {
error(node.name, ts.Diagnostics.Ambient_const_enums_are_not_allowed_when_the_isolatedModules_flag_is_provided);
}
var enumSymbol = getSymbolOfNode(node);
var firstDeclaration = ts.getDeclarationOfKind(enumSymbol, node.kind);
if (node === firstDeclaration) {
if (enumSymbol.declarations.length > 1) {
ts.forEach(enumSymbol.declarations, function (decl) {
if (ts.isConstEnumDeclaration(decl) !== enumIsConst) {
error(ts.getNameOfDeclaration(decl), ts.Diagnostics.Enum_declarations_must_all_be_const_or_non_const);
}
});
}
var seenEnumMissingInitialInitializer_1 = false;
ts.forEach(enumSymbol.declarations, function (declaration) {
if (declaration.kind !== 232) {
return false;
}
var enumDeclaration = declaration;
if (!enumDeclaration.members.length) {
return false;
}
var firstEnumMember = enumDeclaration.members[0];
if (!firstEnumMember.initializer) {
if (seenEnumMissingInitialInitializer_1) {
error(firstEnumMember.name, ts.Diagnostics.In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element);
}
else {
seenEnumMissingInitialInitializer_1 = true;
}
}
});
}
}
function getFirstNonAmbientClassOrFunctionDeclaration(symbol) {
var declarations = symbol.declarations;
for (var _i = 0, declarations_7 = declarations; _i < declarations_7.length; _i++) {
var declaration = declarations_7[_i];
if ((declaration.kind === 229 ||
(declaration.kind === 228 && ts.nodeIsPresent(declaration.body))) &&
!ts.isInAmbientContext(declaration)) {
return declaration;
}
}
return undefined;
}
function inSameLexicalScope(node1, node2) {
var container1 = ts.getEnclosingBlockScopeContainer(node1);
var container2 = ts.getEnclosingBlockScopeContainer(node2);
if (isGlobalSourceFile(container1)) {
return isGlobalSourceFile(container2);
}
else if (isGlobalSourceFile(container2)) {
return false;
}
else {
return container1 === container2;
}
}
function checkModuleDeclaration(node) {
if (produceDiagnostics) {
var isGlobalAugmentation = ts.isGlobalScopeAugmentation(node);
var inAmbientContext = ts.isInAmbientContext(node);
if (isGlobalAugmentation && !inAmbientContext) {
error(node.name, ts.Diagnostics.Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambient_context);
}
var isAmbientExternalModule = ts.isAmbientModule(node);
var contextErrorMessage = isAmbientExternalModule
? ts.Diagnostics.An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file
: ts.Diagnostics.A_namespace_declaration_is_only_allowed_in_a_namespace_or_module;
if (checkGrammarModuleElementContext(node, contextErrorMessage)) {
return;
}
if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node)) {
if (!inAmbientContext && node.name.kind === 9) {
grammarErrorOnNode(node.name, ts.Diagnostics.Only_ambient_modules_can_use_quoted_names);
}
}
if (ts.isIdentifier(node.name)) {
checkCollisionWithCapturedThisVariable(node, node.name);
checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
}
checkExportsOnMergedDeclarations(node);
var symbol = getSymbolOfNode(node);
if (symbol.flags & 512
&& symbol.declarations.length > 1
&& !inAmbientContext
&& isInstantiatedModule(node, compilerOptions.preserveConstEnums || compilerOptions.isolatedModules)) {
var firstNonAmbientClassOrFunc = getFirstNonAmbientClassOrFunctionDeclaration(symbol);
if (firstNonAmbientClassOrFunc) {
if (ts.getSourceFileOfNode(node) !== ts.getSourceFileOfNode(firstNonAmbientClassOrFunc)) {
error(node.name, ts.Diagnostics.A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged);
}
else if (node.pos < firstNonAmbientClassOrFunc.pos) {
error(node.name, ts.Diagnostics.A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged);
}
}
var mergedClass = ts.getDeclarationOfKind(symbol, 229);
if (mergedClass &&
inSameLexicalScope(node, mergedClass)) {
getNodeLinks(node).flags |= 32768;
}
}
if (isAmbientExternalModule) {
if (ts.isExternalModuleAugmentation(node)) {
var checkBody = isGlobalAugmentation || (getSymbolOfNode(node).flags & 33554432);
if (checkBody && node.body) {
for (var _i = 0, _a = node.body.statements; _i < _a.length; _i++) {
var statement = _a[_i];
checkModuleAugmentationElement(statement, isGlobalAugmentation);
}
}
}
else if (isGlobalSourceFile(node.parent)) {
if (isGlobalAugmentation) {
error(node.name, ts.Diagnostics.Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_declarations);
}
else if (ts.isExternalModuleNameRelative(ts.getTextOfIdentifierOrLiteral(node.name))) {
error(node.name, ts.Diagnostics.Ambient_module_declaration_cannot_specify_relative_module_name);
}
}
else {
if (isGlobalAugmentation) {
error(node.name, ts.Diagnostics.Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_declarations);
}
else {
error(node.name, ts.Diagnostics.Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces);
}
}
}
}
if (node.body) {
checkSourceElement(node.body);
if (!ts.isGlobalScopeAugmentation(node)) {
registerForUnusedIdentifiersCheck(node);
}
}
}
function checkModuleAugmentationElement(node, isGlobalAugmentation) {
switch (node.kind) {
case 208:
for (var _i = 0, _a = node.declarationList.declarations; _i < _a.length; _i++) {
var decl = _a[_i];
checkModuleAugmentationElement(decl, isGlobalAugmentation);
}
break;
case 243:
case 244:
grammarErrorOnFirstToken(node, ts.Diagnostics.Exports_and_export_assignments_are_not_permitted_in_module_augmentations);
break;
case 237:
case 238:
grammarErrorOnFirstToken(node, ts.Diagnostics.Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_module);
break;
case 176:
case 226:
var name = node.name;
if (ts.isBindingPattern(name)) {
for (var _b = 0, _c = name.elements; _b < _c.length; _b++) {
var el = _c[_b];
checkModuleAugmentationElement(el, isGlobalAugmentation);
}
break;
}
case 229:
case 232:
case 228:
case 230:
case 233:
case 231:
if (isGlobalAugmentation) {
return;
}
var symbol = getSymbolOfNode(node);
if (symbol) {
var reportError = !(symbol.flags & 33554432);
if (!reportError) {
reportError = ts.isExternalModuleAugmentation(symbol.parent.declarations[0]);
}
}
break;
}
}
function getFirstIdentifier(node) {
switch (node.kind) {
case 71:
return node;
case 143:
do {
node = node.left;
} while (node.kind !== 71);
return node;
case 179:
do {
node = node.expression;
} while (node.kind !== 71);
return node;
}
}
function checkExternalImportOrExportDeclaration(node) {
var moduleName = ts.getExternalModuleName(node);
if (!ts.nodeIsMissing(moduleName) && moduleName.kind !== 9) {
error(moduleName, ts.Diagnostics.String_literal_expected);
return false;
}
var inAmbientExternalModule = node.parent.kind === 234 && ts.isAmbientModule(node.parent.parent);
if (node.parent.kind !== 265 && !inAmbientExternalModule) {
error(moduleName, node.kind === 244 ?
ts.Diagnostics.Export_declarations_are_not_permitted_in_a_namespace :
ts.Diagnostics.Import_declarations_in_a_namespace_cannot_reference_a_module);
return false;
}
if (inAmbientExternalModule && ts.isExternalModuleNameRelative(ts.getTextOfIdentifierOrLiteral(moduleName))) {
if (!isTopLevelInExternalModuleAugmentation(node)) {
error(node, ts.Diagnostics.Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relative_module_name);
return false;
}
}
return true;
}
function checkAliasSymbol(node) {
var symbol = getSymbolOfNode(node);
var target = resolveAlias(symbol);
if (target !== unknownSymbol) {
var excludedMeanings = (symbol.flags & (107455 | 1048576) ? 107455 : 0) |
(symbol.flags & 793064 ? 793064 : 0) |
(symbol.flags & 1920 ? 1920 : 0);
if (target.flags & excludedMeanings) {
var message = node.kind === 246 ?
ts.Diagnostics.Export_declaration_conflicts_with_exported_declaration_of_0 :
ts.Diagnostics.Import_declaration_conflicts_with_local_declaration_of_0;
error(node, message, symbolToString(symbol));
}
if (compilerOptions.isolatedModules
&& node.kind === 246
&& !(target.flags & 107455)
&& !ts.isInAmbientContext(node)) {
error(node, ts.Diagnostics.Cannot_re_export_a_type_when_the_isolatedModules_flag_is_provided);
}
}
}
function checkImportBinding(node) {
checkCollisionWithCapturedThisVariable(node, node.name);
checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
checkAliasSymbol(node);
}
function checkImportDeclaration(node) {
if (checkGrammarModuleElementContext(node, ts.Diagnostics.An_import_declaration_can_only_be_used_in_a_namespace_or_module)) {
return;
}
if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && ts.hasModifiers(node)) {
grammarErrorOnFirstToken(node, ts.Diagnostics.An_import_declaration_cannot_have_modifiers);
}
if (checkExternalImportOrExportDeclaration(node)) {
var importClause = node.importClause;
if (importClause) {
if (importClause.name) {
checkImportBinding(importClause);
}
if (importClause.namedBindings) {
if (importClause.namedBindings.kind === 240) {
checkImportBinding(importClause.namedBindings);
}
else {
ts.forEach(importClause.namedBindings.elements, checkImportBinding);
}
}
}
}
}
function checkImportEqualsDeclaration(node) {
if (checkGrammarModuleElementContext(node, ts.Diagnostics.An_import_declaration_can_only_be_used_in_a_namespace_or_module)) {
return;
}
checkGrammarDecorators(node) || checkGrammarModifiers(node);
if (ts.isInternalModuleImportEqualsDeclaration(node) || checkExternalImportOrExportDeclaration(node)) {
checkImportBinding(node);
if (ts.hasModifier(node, 1)) {
markExportAsReferenced(node);
}
if (ts.isInternalModuleImportEqualsDeclaration(node)) {
var target = resolveAlias(getSymbolOfNode(node));
if (target !== unknownSymbol) {
if (target.flags & 107455) {
var moduleName = getFirstIdentifier(node.moduleReference);
if (!(resolveEntityName(moduleName, 107455 | 1920).flags & 1920)) {
error(moduleName, ts.Diagnostics.Module_0_is_hidden_by_a_local_declaration_with_the_same_name, ts.declarationNameToString(moduleName));
}
}
if (target.flags & 793064) {
checkTypeNameIsReserved(node.name, ts.Diagnostics.Import_name_cannot_be_0);
}
}
}
else {
if (modulekind >= ts.ModuleKind.ES2015 && !ts.isInAmbientContext(node)) {
grammarErrorOnNode(node, ts.Diagnostics.Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_ns_from_mod_import_a_from_mod_import_d_from_mod_or_another_module_format_instead);
}
}
}
}
function checkExportDeclaration(node) {
if (checkGrammarModuleElementContext(node, ts.Diagnostics.An_export_declaration_can_only_be_used_in_a_module)) {
return;
}
if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && ts.hasModifiers(node)) {
grammarErrorOnFirstToken(node, ts.Diagnostics.An_export_declaration_cannot_have_modifiers);
}
if (!node.moduleSpecifier || checkExternalImportOrExportDeclaration(node)) {
if (node.exportClause) {
ts.forEach(node.exportClause.elements, checkExportSpecifier);
var inAmbientExternalModule = node.parent.kind === 234 && ts.isAmbientModule(node.parent.parent);
var inAmbientNamespaceDeclaration = !inAmbientExternalModule && node.parent.kind === 234 &&
!node.moduleSpecifier && ts.isInAmbientContext(node);
if (node.parent.kind !== 265 && !inAmbientExternalModule && !inAmbientNamespaceDeclaration) {
error(node, ts.Diagnostics.Export_declarations_are_not_permitted_in_a_namespace);
}
}
else {
var moduleSymbol = resolveExternalModuleName(node, node.moduleSpecifier);
if (moduleSymbol && hasExportAssignmentSymbol(moduleSymbol)) {
error(node.moduleSpecifier, ts.Diagnostics.Module_0_uses_export_and_cannot_be_used_with_export_Asterisk, symbolToString(moduleSymbol));
}
if (modulekind !== ts.ModuleKind.System && modulekind !== ts.ModuleKind.ES2015 && modulekind !== ts.ModuleKind.ESNext) {
checkExternalEmitHelpers(node, 32768);
}
}
}
}
function checkGrammarModuleElementContext(node, errorMessage) {
var isInAppropriateContext = node.parent.kind === 265 || node.parent.kind === 234 || node.parent.kind === 233;
if (!isInAppropriateContext) {
grammarErrorOnFirstToken(node, errorMessage);
}
return !isInAppropriateContext;
}
function checkExportSpecifier(node) {
checkAliasSymbol(node);
if (!node.parent.parent.moduleSpecifier) {
var exportedName = node.propertyName || node.name;
var symbol = resolveName(exportedName, exportedName.escapedText, 107455 | 793064 | 1920 | 2097152, undefined, undefined, true);
if (symbol && (symbol === undefinedSymbol || isGlobalSourceFile(getDeclarationContainer(symbol.declarations[0])))) {
error(exportedName, ts.Diagnostics.Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module, ts.idText(exportedName));
}
else {
markExportAsReferenced(node);
}
}
}
function checkExportAssignment(node) {
if (checkGrammarModuleElementContext(node, ts.Diagnostics.An_export_assignment_can_only_be_used_in_a_module)) {
return;
}
var container = node.parent.kind === 265 ? node.parent : node.parent.parent;
if (container.kind === 233 && !ts.isAmbientModule(container)) {
if (node.isExportEquals) {
error(node, ts.Diagnostics.An_export_assignment_cannot_be_used_in_a_namespace);
}
else {
error(node, ts.Diagnostics.A_default_export_can_only_be_used_in_an_ECMAScript_style_module);
}
return;
}
if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && ts.hasModifiers(node)) {
grammarErrorOnFirstToken(node, ts.Diagnostics.An_export_assignment_cannot_have_modifiers);
}
if (node.expression.kind === 71) {
markExportAsReferenced(node);
}
else {
checkExpressionCached(node.expression);
}
checkExternalModuleExports(container);
if (ts.isInAmbientContext(node) && !ts.isEntityNameExpression(node.expression)) {
grammarErrorOnNode(node.expression, ts.Diagnostics.The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context);
}
if (node.isExportEquals && !ts.isInAmbientContext(node)) {
if (modulekind >= ts.ModuleKind.ES2015) {
grammarErrorOnNode(node, ts.Diagnostics.Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or_another_module_format_instead);
}
else if (modulekind === ts.ModuleKind.System) {
grammarErrorOnNode(node, ts.Diagnostics.Export_assignment_is_not_supported_when_module_flag_is_system);
}
}
}
function hasExportedMembers(moduleSymbol) {
return ts.forEachEntry(moduleSymbol.exports, function (_, id) { return id !== "export="; });
}
function checkExternalModuleExports(node) {
var moduleSymbol = getSymbolOfNode(node);
var links = getSymbolLinks(moduleSymbol);
if (!links.exportsChecked) {
var exportEqualsSymbol = moduleSymbol.exports.get("export=");
if (exportEqualsSymbol && hasExportedMembers(moduleSymbol)) {
var declaration = getDeclarationOfAliasSymbol(exportEqualsSymbol) || exportEqualsSymbol.valueDeclaration;
if (!isTopLevelInExternalModuleAugmentation(declaration)) {
error(declaration, ts.Diagnostics.An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements);
}
}
var exports = getExportsOfModule(moduleSymbol);
exports && exports.forEach(function (_a, id) {
var declarations = _a.declarations, flags = _a.flags;
if (id === "__export") {
return;
}
if (flags & (1920 | 64 | 384)) {
return;
}
var exportedDeclarationsCount = ts.countWhere(declarations, isNotOverloadAndNotAccessor);
if (flags & 524288 && exportedDeclarationsCount <= 2) {
return;
}
if (exportedDeclarationsCount > 1) {
for (var _i = 0, declarations_8 = declarations; _i < declarations_8.length; _i++) {
var declaration = declarations_8[_i];
if (isNotOverload(declaration)) {
diagnostics.add(ts.createDiagnosticForNode(declaration, ts.Diagnostics.Cannot_redeclare_exported_variable_0, ts.unescapeLeadingUnderscores(id)));
}
}
}
});
links.exportsChecked = true;
}
}
function isNotAccessor(declaration) {
return !ts.isAccessor(declaration);
}
function isNotOverload(declaration) {
return (declaration.kind !== 228 && declaration.kind !== 151) ||
!!declaration.body;
}
function checkSourceElement(node) {
if (!node) {
return;
}
if (ts.isInJavaScriptFile(node) && node.jsDoc) {
for (var _i = 0, _a = node.jsDoc; _i < _a.length; _i++) {
var tags = _a[_i].tags;
ts.forEach(tags, checkSourceElement);
}
}
var kind = node.kind;
if (cancellationToken) {
switch (kind) {
case 233:
case 229:
case 230:
case 228:
cancellationToken.throwIfCancellationRequested();
}
}
switch (kind) {
case 145:
return checkTypeParameter(node);
case 146:
return checkParameter(node);
case 149:
case 148:
return checkPropertyDeclaration(node);
case 160:
case 161:
case 155:
case 156:
return checkSignatureDeclaration(node);
case 157:
return checkSignatureDeclaration(node);
case 151:
case 150:
return checkMethodDeclaration(node);
case 152:
return checkConstructorDeclaration(node);
case 153:
case 154:
return checkAccessorDeclaration(node);
case 159:
return checkTypeReferenceNode(node);
case 158:
return checkTypePredicate(node);
case 162:
return checkTypeQuery(node);
case 163:
return checkTypeLiteral(node);
case 164:
return checkArrayType(node);
case 165:
return checkTupleType(node);
case 166:
case 167:
return checkUnionOrIntersectionType(node);
case 168:
case 170:
return checkSourceElement(node.type);
case 277:
return checkJSDocAugmentsTag(node);
case 283:
return checkJSDocTypedefTag(node);
case 279:
return checkJSDocParameterTag(node);
case 273:
checkSignatureDeclaration(node);
case 274:
case 271:
case 270:
case 268:
case 269:
if (!ts.isInJavaScriptFile(node) && !ts.isInJSDoc(node)) {
grammarErrorOnNode(node, ts.Diagnostics.JSDoc_types_can_only_be_used_inside_documentation_comments);
}
return;
case 267:
return checkSourceElement(node.type);
case 171:
return checkIndexedAccessType(node);
case 172:
return checkMappedType(node);
case 228:
return checkFunctionDeclaration(node);
case 207:
case 234:
return checkBlock(node);
case 208:
return checkVariableStatement(node);
case 210:
return checkExpressionStatement(node);
case 211:
return checkIfStatement(node);
case 212:
return checkDoStatement(node);
case 213:
return checkWhileStatement(node);
case 214:
return checkForStatement(node);
case 215:
return checkForInStatement(node);
case 216:
return checkForOfStatement(node);
case 217:
case 218:
return checkBreakOrContinueStatement(node);
case 219:
return checkReturnStatement(node);
case 220:
return checkWithStatement(node);
case 221:
return checkSwitchStatement(node);
case 222:
return checkLabeledStatement(node);
case 223:
return checkThrowStatement(node);
case 224:
return checkTryStatement(node);
case 226:
return checkVariableDeclaration(node);
case 176:
return checkBindingElement(node);
case 229:
return checkClassDeclaration(node);
case 230:
return checkInterfaceDeclaration(node);
case 231:
return checkTypeAliasDeclaration(node);
case 232:
return checkEnumDeclaration(node);
case 233:
return checkModuleDeclaration(node);
case 238:
return checkImportDeclaration(node);
case 237:
return checkImportEqualsDeclaration(node);
case 244:
return checkExportDeclaration(node);
case 243:
return checkExportAssignment(node);
case 209:
checkGrammarStatementInAmbientContext(node);
return;
case 225:
checkGrammarStatementInAmbientContext(node);
return;
case 247:
return checkMissingDeclaration(node);
}
}
function checkNodeDeferred(node) {
if (deferredNodes) {
deferredNodes.push(node);
}
}
function checkDeferredNodes() {
for (var _i = 0, deferredNodes_1 = deferredNodes; _i < deferredNodes_1.length; _i++) {
var node = deferredNodes_1[_i];
switch (node.kind) {
case 186:
case 187:
case 151:
case 150:
checkFunctionExpressionOrObjectLiteralMethodDeferred(node);
break;
case 153:
case 154:
checkAccessorDeclaration(node);
break;
case 199:
checkClassExpressionDeferred(node);
break;
}
}
}
function checkSourceFile(node) {
ts.performance.mark("beforeCheck");
checkSourceFileWorker(node);
ts.performance.mark("afterCheck");
ts.performance.measure("Check", "beforeCheck", "afterCheck");
}
function checkSourceFileWorker(node) {
var links = getNodeLinks(node);
if (!(links.flags & 1)) {
if (compilerOptions.skipLibCheck && node.isDeclarationFile || compilerOptions.skipDefaultLibCheck && node.hasNoDefaultLib) {
return;
}
checkGrammarSourceFile(node);
ts.clear(potentialThisCollisions);
ts.clear(potentialNewTargetCollisions);
deferredNodes = [];
deferredUnusedIdentifierNodes = produceDiagnostics && noUnusedIdentifiers ? [] : undefined;
flowAnalysisDisabled = false;
ts.forEach(node.statements, checkSourceElement);
checkDeferredNodes();
if (ts.isExternalModule(node)) {
registerForUnusedIdentifiersCheck(node);
}
if (!node.isDeclarationFile) {
checkUnusedIdentifiers();
}
deferredNodes = undefined;
deferredUnusedIdentifierNodes = undefined;
if (ts.isExternalOrCommonJsModule(node)) {
checkExternalModuleExports(node);
}
if (potentialThisCollisions.length) {
ts.forEach(potentialThisCollisions, checkIfThisIsCapturedInEnclosingScope);
ts.clear(potentialThisCollisions);
}
if (potentialNewTargetCollisions.length) {
ts.forEach(potentialNewTargetCollisions, checkIfNewTargetIsCapturedInEnclosingScope);
ts.clear(potentialNewTargetCollisions);
}
links.flags |= 1;
}
}
function getDiagnostics(sourceFile, ct) {
try {
cancellationToken = ct;
return getDiagnosticsWorker(sourceFile);
}
finally {
cancellationToken = undefined;
}
}
function getDiagnosticsWorker(sourceFile) {
throwIfNonDiagnosticsProducing();
if (sourceFile) {
var previousGlobalDiagnostics = diagnostics.getGlobalDiagnostics();
var previousGlobalDiagnosticsSize = previousGlobalDiagnostics.length;
checkSourceFile(sourceFile);
var semanticDiagnostics = diagnostics.getDiagnostics(sourceFile.fileName);
var currentGlobalDiagnostics = diagnostics.getGlobalDiagnostics();
if (currentGlobalDiagnostics !== previousGlobalDiagnostics) {
var deferredGlobalDiagnostics = ts.relativeComplement(previousGlobalDiagnostics, currentGlobalDiagnostics, ts.compareDiagnostics);
return ts.concatenate(deferredGlobalDiagnostics, semanticDiagnostics);
}
else if (previousGlobalDiagnosticsSize === 0 && currentGlobalDiagnostics.length > 0) {
return ts.concatenate(currentGlobalDiagnostics, semanticDiagnostics);
}
return semanticDiagnostics;
}
ts.forEach(host.getSourceFiles(), checkSourceFile);
return diagnostics.getDiagnostics();
}
function getGlobalDiagnostics() {
throwIfNonDiagnosticsProducing();
return diagnostics.getGlobalDiagnostics();
}
function throwIfNonDiagnosticsProducing() {
if (!produceDiagnostics) {
throw new Error("Trying to get diagnostics from a type checker that does not produce them.");
}
}
function isInsideWithStatementBody(node) {
if (node) {
while (node.parent) {
if (node.parent.kind === 220 && node.parent.statement === node) {
return true;
}
node = node.parent;
}
}
return false;
}
function getSymbolsInScope(location, meaning) {
if (isInsideWithStatementBody(location)) {
return [];
}
var symbols = ts.createSymbolTable();
var isStatic = false;
populateSymbols();
return symbolsToArray(symbols);
function populateSymbols() {
while (location) {
if (location.locals && !isGlobalSourceFile(location)) {
copySymbols(location.locals, meaning);
}
switch (location.kind) {
case 233:
copySymbols(getSymbolOfNode(location).exports, meaning & 2623475);
break;
case 232:
copySymbols(getSymbolOfNode(location).exports, meaning & 8);
break;
case 199:
var className = location.name;
if (className) {
copySymbol(location.symbol, meaning);
}
case 229:
case 230:
if (!isStatic) {
copySymbols(getSymbolOfNode(location).members, meaning & 793064);
}
break;
case 186:
var funcName = location.name;
if (funcName) {
copySymbol(location.symbol, meaning);
}
break;
}
if (ts.introducesArgumentsExoticObject(location)) {
copySymbol(argumentsSymbol, meaning);
}
isStatic = ts.hasModifier(location, 32);
location = location.parent;
}
copySymbols(globals, meaning);
}
function copySymbol(symbol, meaning) {
if (ts.getCombinedLocalAndExportSymbolFlags(symbol) & meaning) {
var id = symbol.escapedName;
if (!symbols.has(id)) {
symbols.set(id, symbol);
}
}
}
function copySymbols(source, meaning) {
if (meaning) {
source.forEach(function (symbol) {
copySymbol(symbol, meaning);
});
}
}
}
function isTypeDeclarationName(name) {
return name.kind === 71 &&
isTypeDeclaration(name.parent) &&
name.parent.name === name;
}
function isTypeDeclaration(node) {
switch (node.kind) {
case 145:
case 229:
case 230:
case 231:
case 232:
return true;
}
}
function isTypeReferenceIdentifier(entityName) {
var node = entityName;
while (node.parent && node.parent.kind === 143) {
node = node.parent;
}
return node.parent && node.parent.kind === 159;
}
function isHeritageClauseElementIdentifier(entityName) {
var node = entityName;
while (node.parent && node.parent.kind === 179) {
node = node.parent;
}
return node.parent && node.parent.kind === 201;
}
function forEachEnclosingClass(node, callback) {
var result;
while (true) {
node = ts.getContainingClass(node);
if (!node)
break;
if (result = callback(node))
break;
}
return result;
}
function isNodeWithinClass(node, classDeclaration) {
return !!forEachEnclosingClass(node, function (n) { return n === classDeclaration; });
}
function getLeftSideOfImportEqualsOrExportAssignment(nodeOnRightSide) {
while (nodeOnRightSide.parent.kind === 143) {
nodeOnRightSide = nodeOnRightSide.parent;
}
if (nodeOnRightSide.parent.kind === 237) {
return nodeOnRightSide.parent.moduleReference === nodeOnRightSide && nodeOnRightSide.parent;
}
if (nodeOnRightSide.parent.kind === 243) {
return nodeOnRightSide.parent.expression === nodeOnRightSide && nodeOnRightSide.parent;
}
return undefined;
}
function isInRightSideOfImportOrExportAssignment(node) {
return getLeftSideOfImportEqualsOrExportAssignment(node) !== undefined;
}
function getSpecialPropertyAssignmentSymbolFromEntityName(entityName) {
var specialPropertyAssignmentKind = ts.getSpecialPropertyAssignmentKind(entityName.parent.parent);
switch (specialPropertyAssignmentKind) {
case 1:
case 3:
return getSymbolOfNode(entityName.parent);
case 4:
case 2:
case 5:
return getSymbolOfNode(entityName.parent.parent);
}
}
function getSymbolOfEntityNameOrPropertyAccessExpression(entityName) {
if (ts.isDeclarationName(entityName)) {
return getSymbolOfNode(entityName.parent);
}
if (ts.isInJavaScriptFile(entityName) &&
entityName.parent.kind === 179 &&
entityName.parent === entityName.parent.parent.left) {
var specialPropertyAssignmentSymbol = getSpecialPropertyAssignmentSymbolFromEntityName(entityName);
if (specialPropertyAssignmentSymbol) {
return specialPropertyAssignmentSymbol;
}
}
if (entityName.parent.kind === 243 && ts.isEntityNameExpression(entityName)) {
return resolveEntityName(entityName, 107455 | 793064 | 1920 | 2097152);
}
if (entityName.kind !== 179 && isInRightSideOfImportOrExportAssignment(entityName)) {
var importEqualsDeclaration = ts.getAncestor(entityName, 237);
ts.Debug.assert(importEqualsDeclaration !== undefined);
return getSymbolOfPartOfRightHandSideOfImportEquals(entityName, true);
}
if (ts.isRightSideOfQualifiedNameOrPropertyAccess(entityName)) {
entityName = entityName.parent;
}
if (isHeritageClauseElementIdentifier(entityName)) {
var meaning = 0;
if (entityName.parent.kind === 201) {
meaning = 793064;
if (ts.isExpressionWithTypeArgumentsInClassExtendsClause(entityName.parent)) {
meaning |= 107455;
}
}
else {
meaning = 1920;
}
meaning |= 2097152;
var entityNameSymbol = resolveEntityName(entityName, meaning);
if (entityNameSymbol) {
return entityNameSymbol;
}
}
if (entityName.parent.kind === 279) {
return ts.getParameterSymbolFromJSDoc(entityName.parent);
}
if (entityName.parent.kind === 145 && entityName.parent.parent.kind === 282) {
ts.Debug.assert(!ts.isInJavaScriptFile(entityName));
var typeParameter = ts.getTypeParameterFromJsDoc(entityName.parent);
return typeParameter && typeParameter.symbol;
}
if (ts.isPartOfExpression(entityName)) {
if (ts.nodeIsMissing(entityName)) {
return undefined;
}
if (entityName.kind === 71) {
if (ts.isJSXTagName(entityName) && isJsxIntrinsicIdentifier(entityName)) {
return getIntrinsicTagSymbol(entityName.parent);
}
return resolveEntityName(entityName, 107455, false, true);
}
else if (entityName.kind === 179 || entityName.kind === 143) {
var links = getNodeLinks(entityName);
if (links.resolvedSymbol) {
return links.resolvedSymbol;
}
if (entityName.kind === 179) {
checkPropertyAccessExpression(entityName);
}
else {
checkQualifiedName(entityName);
}
return links.resolvedSymbol;
}
}
else if (isTypeReferenceIdentifier(entityName)) {
var meaning = entityName.parent.kind === 159 ? 793064 : 1920;
return resolveEntityName(entityName, meaning, false, true);
}
else if (entityName.parent.kind === 253) {
return getJsxAttributePropertySymbol(entityName.parent);
}
if (entityName.parent.kind === 158) {
return resolveEntityName(entityName, 1);
}
return undefined;
}
function getSymbolAtLocation(node) {
if (node.kind === 265) {
return ts.isExternalModule(node) ? getMergedSymbol(node.symbol) : undefined;
}
if (isInsideWithStatementBody(node)) {
return undefined;
}
if (isDeclarationNameOrImportPropertyName(node)) {
return getSymbolOfNode(node.parent);
}
else if (ts.isLiteralComputedPropertyDeclarationName(node)) {
return getSymbolOfNode(node.parent.parent);
}
if (node.kind === 71) {
if (isInRightSideOfImportOrExportAssignment(node)) {
return getSymbolOfEntityNameOrPropertyAccessExpression(node);
}
else if (node.parent.kind === 176 &&
node.parent.parent.kind === 174 &&
node === node.parent.propertyName) {
var typeOfPattern = getTypeOfNode(node.parent.parent);
var propertyDeclaration = typeOfPattern && getPropertyOfType(typeOfPattern, node.escapedText);
if (propertyDeclaration) {
return propertyDeclaration;
}
}
}
switch (node.kind) {
case 71:
case 179:
case 143:
return getSymbolOfEntityNameOrPropertyAccessExpression(node);
case 99:
var container = ts.getThisContainer(node, false);
if (ts.isFunctionLike(container)) {
var sig = getSignatureFromDeclaration(container);
if (sig.thisParameter) {
return sig.thisParameter;
}
}
if (ts.isInExpressionContext(node)) {
return checkExpression(node).symbol;
}
case 169:
return getTypeFromThisTypeNode(node).symbol;
case 97:
return checkExpression(node).symbol;
case 123:
var constructorDeclaration = node.parent;
if (constructorDeclaration && constructorDeclaration.kind === 152) {
return constructorDeclaration.parent.symbol;
}
return undefined;
case 9:
if ((ts.isExternalModuleImportEqualsDeclaration(node.parent.parent) && ts.getExternalModuleImportEqualsDeclarationExpression(node.parent.parent) === node) ||
((node.parent.kind === 238 || node.parent.kind === 244) && node.parent.moduleSpecifier === node) ||
((ts.isInJavaScriptFile(node) && ts.isRequireCall(node.parent, false)) || ts.isImportCall(node.parent))) {
return resolveExternalModuleName(node, node);
}
case 8:
var objectType = ts.isElementAccessExpression(node.parent)
? node.parent.argumentExpression === node ? getTypeOfExpression(node.parent.expression) : undefined
: ts.isLiteralTypeNode(node.parent) && ts.isIndexedAccessTypeNode(node.parent.parent)
? getTypeFromTypeNode(node.parent.parent.objectType)
: undefined;
return objectType && getPropertyOfType(objectType, ts.escapeLeadingUnderscores(node.text));
case 79:
return getSymbolOfNode(node.parent);
default:
return undefined;
}
}
function getShorthandAssignmentValueSymbol(location) {
if (location && location.kind === 262) {
return resolveEntityName(location.name, 107455 | 2097152);
}
return undefined;
}
function getExportSpecifierLocalTargetSymbol(node) {
return node.parent.parent.moduleSpecifier ?
getExternalModuleMember(node.parent.parent, node) :
resolveEntityName(node.propertyName || node.name, 107455 | 793064 | 1920 | 2097152);
}
function getTypeOfNode(node) {
if (isInsideWithStatementBody(node)) {
return unknownType;
}
if (ts.isPartOfTypeNode(node)) {
var typeFromTypeNode = getTypeFromTypeNode(node);
if (typeFromTypeNode && ts.isExpressionWithTypeArgumentsInClassImplementsClause(node)) {
var containingClass = ts.getContainingClass(node);
var classType = getTypeOfNode(containingClass);
typeFromTypeNode = getTypeWithThisArgument(typeFromTypeNode, classType.thisType);
}
return typeFromTypeNode;
}
if (ts.isPartOfExpression(node)) {
return getRegularTypeOfExpression(node);
}
if (ts.isExpressionWithTypeArgumentsInClassExtendsClause(node)) {
var classNode = ts.getContainingClass(node);
var classType = getDeclaredTypeOfSymbol(getSymbolOfNode(classNode));
var baseType = getBaseTypes(classType)[0];
return baseType && getTypeWithThisArgument(baseType, classType.thisType);
}
if (isTypeDeclaration(node)) {
var symbol = getSymbolOfNode(node);
return getDeclaredTypeOfSymbol(symbol);
}
if (isTypeDeclarationName(node)) {
var symbol = getSymbolAtLocation(node);
return symbol && getDeclaredTypeOfSymbol(symbol);
}
if (ts.isDeclaration(node)) {
var symbol = getSymbolOfNode(node);
return getTypeOfSymbol(symbol);
}
if (isDeclarationNameOrImportPropertyName(node)) {
var symbol = getSymbolAtLocation(node);
return symbol && getTypeOfSymbol(symbol);
}
if (ts.isBindingPattern(node)) {
return getTypeForVariableLikeDeclaration(node.parent, true);
}
if (isInRightSideOfImportOrExportAssignment(node)) {
var symbol = getSymbolAtLocation(node);
var declaredType = symbol && getDeclaredTypeOfSymbol(symbol);
return declaredType !== unknownType ? declaredType : getTypeOfSymbol(symbol);
}
return unknownType;
}
function getTypeOfArrayLiteralOrObjectLiteralDestructuringAssignment(expr) {
ts.Debug.assert(expr.kind === 178 || expr.kind === 177);
if (expr.parent.kind === 216) {
var iteratedType = checkRightHandSideOfForOf(expr.parent.expression, expr.parent.awaitModifier);
return checkDestructuringAssignment(expr, iteratedType || unknownType);
}
if (expr.parent.kind === 194) {
var iteratedType = getTypeOfExpression(expr.parent.right);
return checkDestructuringAssignment(expr, iteratedType || unknownType);
}
if (expr.parent.kind === 261) {
var typeOfParentObjectLiteral = getTypeOfArrayLiteralOrObjectLiteralDestructuringAssignment(expr.parent.parent);
return checkObjectLiteralDestructuringPropertyAssignment(typeOfParentObjectLiteral || unknownType, expr.parent);
}
ts.Debug.assert(expr.parent.kind === 177);
var typeOfArrayLiteral = getTypeOfArrayLiteralOrObjectLiteralDestructuringAssignment(expr.parent);
var elementType = checkIteratedTypeOrElementType(typeOfArrayLiteral || unknownType, expr.parent, false, false) || unknownType;
return checkArrayLiteralDestructuringElementAssignment(expr.parent, typeOfArrayLiteral, ts.indexOf(expr.parent.elements, expr), elementType || unknownType);
}
function getPropertySymbolOfDestructuringAssignment(location) {
var typeOfObjectLiteral = getTypeOfArrayLiteralOrObjectLiteralDestructuringAssignment(location.parent.parent);
return typeOfObjectLiteral && getPropertyOfType(typeOfObjectLiteral, location.escapedText);
}
function getRegularTypeOfExpression(expr) {
if (ts.isRightSideOfQualifiedNameOrPropertyAccess(expr)) {
expr = expr.parent;
}
return getRegularTypeOfLiteralType(getTypeOfExpression(expr));
}
function getParentTypeOfClassElement(node) {
var classSymbol = getSymbolOfNode(node.parent);
return ts.hasModifier(node, 32)
? getTypeOfSymbol(classSymbol)
: getDeclaredTypeOfSymbol(classSymbol);
}
function getAugmentedPropertiesOfType(type) {
type = getApparentType(type);
var propsByName = ts.createSymbolTable(getPropertiesOfType(type));
if (getSignaturesOfType(type, 0).length || getSignaturesOfType(type, 1).length) {
ts.forEach(getPropertiesOfType(globalFunctionType), function (p) {
if (!propsByName.has(p.escapedName)) {
propsByName.set(p.escapedName, p);
}
});
}
return getNamedMembers(propsByName);
}
function getRootSymbols(symbol) {
if (ts.getCheckFlags(symbol) & 6) {
var symbols_4 = [];
var name_3 = symbol.escapedName;
ts.forEach(getSymbolLinks(symbol).containingType.types, function (t) {
var symbol = getPropertyOfType(t, name_3);
if (symbol) {
symbols_4.push(symbol);
}
});
return symbols_4;
}
else if (symbol.flags & 33554432) {
var transient = symbol;
if (transient.leftSpread) {
return getRootSymbols(transient.leftSpread).concat(getRootSymbols(transient.rightSpread));
}
if (transient.syntheticOrigin) {
return getRootSymbols(transient.syntheticOrigin);
}
var target = void 0;
var next = symbol;
while (next = getSymbolLinks(next).target) {
target = next;
}
if (target) {
return [target];
}
}
return [symbol];
}
function isArgumentsLocalBinding(node) {
if (!ts.isGeneratedIdentifier(node)) {
node = ts.getParseTreeNode(node, ts.isIdentifier);
if (node) {
var isPropertyName_1 = node.parent.kind === 179 && node.parent.name === node;
return !isPropertyName_1 && getReferencedValueSymbol(node) === argumentsSymbol;
}
}
return false;
}
function moduleExportsSomeValue(moduleReferenceExpression) {
var moduleSymbol = resolveExternalModuleName(moduleReferenceExpression.parent, moduleReferenceExpression);
if (!moduleSymbol || ts.isShorthandAmbientModuleSymbol(moduleSymbol)) {
return true;
}
var hasExportAssignment = hasExportAssignmentSymbol(moduleSymbol);
moduleSymbol = resolveExternalModuleSymbol(moduleSymbol);
var symbolLinks = getSymbolLinks(moduleSymbol);
if (symbolLinks.exportsSomeValue === undefined) {
symbolLinks.exportsSomeValue = hasExportAssignment
? !!(moduleSymbol.flags & 107455)
: ts.forEachEntry(getExportsOfModule(moduleSymbol), isValue);
}
return symbolLinks.exportsSomeValue;
function isValue(s) {
s = resolveSymbol(s);
return s && !!(s.flags & 107455);
}
}
function isNameOfModuleOrEnumDeclaration(node) {
var parent = node.parent;
return parent && ts.isModuleOrEnumDeclaration(parent) && node === parent.name;
}
function getReferencedExportContainer(node, prefixLocals) {
node = ts.getParseTreeNode(node, ts.isIdentifier);
if (node) {
var symbol = getReferencedValueSymbol(node, isNameOfModuleOrEnumDeclaration(node));
if (symbol) {
if (symbol.flags & 1048576) {
var exportSymbol = getMergedSymbol(symbol.exportSymbol);
if (!prefixLocals && exportSymbol.flags & 944) {
return undefined;
}
symbol = exportSymbol;
}
var parentSymbol_1 = getParentOfSymbol(symbol);
if (parentSymbol_1) {
if (parentSymbol_1.flags & 512 && parentSymbol_1.valueDeclaration.kind === 265) {
var symbolFile = parentSymbol_1.valueDeclaration;
var referenceFile = ts.getSourceFileOfNode(node);
var symbolIsUmdExport = symbolFile !== referenceFile;
return symbolIsUmdExport ? undefined : symbolFile;
}
return ts.findAncestor(node.parent, function (n) { return ts.isModuleOrEnumDeclaration(n) && getSymbolOfNode(n) === parentSymbol_1; });
}
}
}
}
function getReferencedImportDeclaration(node) {
node = ts.getParseTreeNode(node, ts.isIdentifier);
if (node) {
var symbol = getReferencedValueSymbol(node);
if (isNonLocalAlias(symbol, 107455)) {
return getDeclarationOfAliasSymbol(symbol);
}
}
return undefined;
}
function isSymbolOfDeclarationWithCollidingName(symbol) {
if (symbol.flags & 418) {
var links = getSymbolLinks(symbol);
if (links.isDeclarationWithCollidingName === undefined) {
var container = ts.getEnclosingBlockScopeContainer(symbol.valueDeclaration);
if (ts.isStatementWithLocals(container)) {
var nodeLinks_1 = getNodeLinks(symbol.valueDeclaration);
if (resolveName(container.parent, symbol.escapedName, 107455, undefined, undefined, false)) {
links.isDeclarationWithCollidingName = true;
}
else if (nodeLinks_1.flags & 131072) {
var isDeclaredInLoop = nodeLinks_1.flags & 262144;
var inLoopInitializer = ts.isIterationStatement(container, false);
var inLoopBodyBlock = container.kind === 207 && ts.isIterationStatement(container.parent, false);
links.isDeclarationWithCollidingName = !ts.isBlockScopedContainerTopLevel(container) && (!isDeclaredInLoop || (!inLoopInitializer && !inLoopBodyBlock));
}
else {
links.isDeclarationWithCollidingName = false;
}
}
}
return links.isDeclarationWithCollidingName;
}
return false;
}
function getReferencedDeclarationWithCollidingName(node) {
if (!ts.isGeneratedIdentifier(node)) {
node = ts.getParseTreeNode(node, ts.isIdentifier);
if (node) {
var symbol = getReferencedValueSymbol(node);
if (symbol && isSymbolOfDeclarationWithCollidingName(symbol)) {
return symbol.valueDeclaration;
}
}
}
return undefined;
}
function isDeclarationWithCollidingName(node) {
node = ts.getParseTreeNode(node, ts.isDeclaration);
if (node) {
var symbol = getSymbolOfNode(node);
if (symbol) {
return isSymbolOfDeclarationWithCollidingName(symbol);
}
}
return false;
}
function isValueAliasDeclaration(node) {
switch (node.kind) {
case 237:
case 239:
case 240:
case 242:
case 246:
return isAliasResolvedToValue(getSymbolOfNode(node) || unknownSymbol);
case 244:
var exportClause = node.exportClause;
return exportClause && ts.forEach(exportClause.elements, isValueAliasDeclaration);
case 243:
return node.expression
&& node.expression.kind === 71
? isAliasResolvedToValue(getSymbolOfNode(node) || unknownSymbol)
: true;
}
return false;
}
function isTopLevelValueImportEqualsWithEntityName(node) {
node = ts.getParseTreeNode(node, ts.isImportEqualsDeclaration);
if (node === undefined || node.parent.kind !== 265 || !ts.isInternalModuleImportEqualsDeclaration(node)) {
return false;
}
var isValue = isAliasResolvedToValue(getSymbolOfNode(node));
return isValue && node.moduleReference && !ts.nodeIsMissing(node.moduleReference);
}
function isAliasResolvedToValue(symbol) {
var target = resolveAlias(symbol);
if (target === unknownSymbol) {
return true;
}
return target.flags & 107455 &&
(compilerOptions.preserveConstEnums || !isConstEnumOrConstEnumOnlyModule(target));
}
function isConstEnumOrConstEnumOnlyModule(s) {
return isConstEnumSymbol(s) || s.constEnumOnlyModule;
}
function isReferencedAliasDeclaration(node, checkChildren) {
if (ts.isAliasSymbolDeclaration(node)) {
var symbol = getSymbolOfNode(node);
if (symbol && getSymbolLinks(symbol).referenced) {
return true;
}
}
if (checkChildren) {
return ts.forEachChild(node, function (node) { return isReferencedAliasDeclaration(node, checkChildren); });
}
return false;
}
function isImplementationOfOverload(node) {
if (ts.nodeIsPresent(node.body)) {
var symbol = getSymbolOfNode(node);
var signaturesOfSymbol = getSignaturesOfSymbol(symbol);
return signaturesOfSymbol.length > 1 ||
(signaturesOfSymbol.length === 1 && signaturesOfSymbol[0].declaration !== node);
}
return false;
}
function isRequiredInitializedParameter(parameter) {
return strictNullChecks &&
!isOptionalParameter(parameter) &&
parameter.initializer &&
!ts.hasModifier(parameter, 92);
}
function isOptionalUninitializedParameterProperty(parameter) {
return strictNullChecks &&
isOptionalParameter(parameter) &&
!parameter.initializer &&
ts.hasModifier(parameter, 92);
}
function getNodeCheckFlags(node) {
return getNodeLinks(node).flags;
}
function getEnumMemberValue(node) {
computeEnumMemberValues(node.parent);
return getNodeLinks(node).enumMemberValue;
}
function canHaveConstantValue(node) {
switch (node.kind) {
case 264:
case 179:
case 180:
return true;
}
return false;
}
function getConstantValue(node) {
if (node.kind === 264) {
return getEnumMemberValue(node);
}
var symbol = getNodeLinks(node).resolvedSymbol;
if (symbol && (symbol.flags & 8)) {
if (ts.isConstEnumDeclaration(symbol.valueDeclaration.parent)) {
return getEnumMemberValue(symbol.valueDeclaration);
}
}
return undefined;
}
function isFunctionType(type) {
return type.flags & 32768 && getSignaturesOfType(type, 0).length > 0;
}
function getTypeReferenceSerializationKind(typeName, location) {
typeName = ts.getParseTreeNode(typeName, ts.isEntityName);
if (!typeName)
return ts.TypeReferenceSerializationKind.Unknown;
if (location) {
location = ts.getParseTreeNode(location);
if (!location)
return ts.TypeReferenceSerializationKind.Unknown;
}
var valueSymbol = resolveEntityName(typeName, 107455, true, false, location);
var typeSymbol = resolveEntityName(typeName, 793064, true, false, location);
if (valueSymbol && valueSymbol === typeSymbol) {
var globalPromiseSymbol = getGlobalPromiseConstructorSymbol(false);
if (globalPromiseSymbol && valueSymbol === globalPromiseSymbol) {
return ts.TypeReferenceSerializationKind.Promise;
}
var constructorType = getTypeOfSymbol(valueSymbol);
if (constructorType && isConstructorType(constructorType)) {
return ts.TypeReferenceSerializationKind.TypeWithConstructSignatureAndValue;
}
}
if (!typeSymbol) {
return ts.TypeReferenceSerializationKind.ObjectType;
}
var type = getDeclaredTypeOfSymbol(typeSymbol);
if (type === unknownType) {
return ts.TypeReferenceSerializationKind.Unknown;
}
else if (type.flags & 1) {
return ts.TypeReferenceSerializationKind.ObjectType;
}
else if (isTypeAssignableToKind(type, 1024 | 6144 | 8192)) {
return ts.TypeReferenceSerializationKind.VoidNullableOrNeverType;
}
else if (isTypeAssignableToKind(type, 136)) {
return ts.TypeReferenceSerializationKind.BooleanType;
}
else if (isTypeAssignableToKind(type, 84)) {
return ts.TypeReferenceSerializationKind.NumberLikeType;
}
else if (isTypeAssignableToKind(type, 262178)) {
return ts.TypeReferenceSerializationKind.StringLikeType;
}
else if (isTupleType(type)) {
return ts.TypeReferenceSerializationKind.ArrayLikeType;
}
else if (isTypeAssignableToKind(type, 512)) {
return ts.TypeReferenceSerializationKind.ESSymbolType;
}
else if (isFunctionType(type)) {
return ts.TypeReferenceSerializationKind.TypeWithCallSignature;
}
else if (isArrayType(type)) {
return ts.TypeReferenceSerializationKind.ArrayLikeType;
}
else {
return ts.TypeReferenceSerializationKind.ObjectType;
}
}
function writeTypeOfDeclaration(declaration, enclosingDeclaration, flags, writer) {
var symbol = getSymbolOfNode(declaration);
var type = symbol && !(symbol.flags & (2048 | 131072))
? getWidenedLiteralType(getTypeOfSymbol(symbol))
: unknownType;
if (flags & 8192) {
type = getNullableType(type, 2048);
}
getSymbolDisplayBuilder().buildTypeDisplay(type, writer, enclosingDeclaration, flags);
}
function writeReturnTypeOfSignatureDeclaration(signatureDeclaration, enclosingDeclaration, flags, writer) {
var signature = getSignatureFromDeclaration(signatureDeclaration);
getSymbolDisplayBuilder().buildTypeDisplay(getReturnTypeOfSignature(signature), writer, enclosingDeclaration, flags);
}
function writeTypeOfExpression(expr, enclosingDeclaration, flags, writer) {
var type = getWidenedType(getRegularTypeOfExpression(expr));
getSymbolDisplayBuilder().buildTypeDisplay(type, writer, enclosingDeclaration, flags);
}
function hasGlobalName(name) {
return globals.has(ts.escapeLeadingUnderscores(name));
}
function getReferencedValueSymbol(reference, startInDeclarationContainer) {
var resolvedSymbol = getNodeLinks(reference).resolvedSymbol;
if (resolvedSymbol) {
return resolvedSymbol;
}
var location = reference;
if (startInDeclarationContainer) {
var parent = reference.parent;
if (ts.isDeclaration(parent) && reference === parent.name) {
location = getDeclarationContainer(parent);
}
}
return resolveName(location, reference.escapedText, 107455 | 1048576 | 2097152, undefined, undefined, true);
}
function getReferencedValueDeclaration(reference) {
if (!ts.isGeneratedIdentifier(reference)) {
reference = ts.getParseTreeNode(reference, ts.isIdentifier);
if (reference) {
var symbol = getReferencedValueSymbol(reference);
if (symbol) {
return getExportSymbolOfValueSymbolIfExported(symbol).valueDeclaration;
}
}
}
return undefined;
}
function isLiteralConstDeclaration(node) {
if (ts.isConst(node)) {
var type = getTypeOfSymbol(getSymbolOfNode(node));
return !!(type.flags & 96 && type.flags & 1048576);
}
return false;
}
function writeLiteralConstValue(node, writer) {
var type = getTypeOfSymbol(getSymbolOfNode(node));
writer.writeStringLiteral(literalTypeToString(type));
}
function createResolver() {
var resolvedTypeReferenceDirectives = host.getResolvedTypeReferenceDirectives();
var fileToDirective;
if (resolvedTypeReferenceDirectives) {
fileToDirective = ts.createMap();
resolvedTypeReferenceDirectives.forEach(function (resolvedDirective, key) {
if (!resolvedDirective) {
return;
}
var file = host.getSourceFile(resolvedDirective.resolvedFileName);
fileToDirective.set(file.path, key);
});
}
return {
getReferencedExportContainer: getReferencedExportContainer,
getReferencedImportDeclaration: getReferencedImportDeclaration,
getReferencedDeclarationWithCollidingName: getReferencedDeclarationWithCollidingName,
isDeclarationWithCollidingName: isDeclarationWithCollidingName,
isValueAliasDeclaration: function (node) {
node = ts.getParseTreeNode(node);
return node ? isValueAliasDeclaration(node) : true;
},
hasGlobalName: hasGlobalName,
isReferencedAliasDeclaration: function (node, checkChildren) {
node = ts.getParseTreeNode(node);
return node ? isReferencedAliasDeclaration(node, checkChildren) : true;
},
getNodeCheckFlags: function (node) {
node = ts.getParseTreeNode(node);
return node ? getNodeCheckFlags(node) : undefined;
},
isTopLevelValueImportEqualsWithEntityName: isTopLevelValueImportEqualsWithEntityName,
isDeclarationVisible: isDeclarationVisible,
isImplementationOfOverload: isImplementationOfOverload,
isRequiredInitializedParameter: isRequiredInitializedParameter,
isOptionalUninitializedParameterProperty: isOptionalUninitializedParameterProperty,
writeTypeOfDeclaration: writeTypeOfDeclaration,
writeReturnTypeOfSignatureDeclaration: writeReturnTypeOfSignatureDeclaration,
writeTypeOfExpression: writeTypeOfExpression,
isSymbolAccessible: isSymbolAccessible,
isEntityNameVisible: isEntityNameVisible,
getConstantValue: function (node) {
node = ts.getParseTreeNode(node, canHaveConstantValue);
return node ? getConstantValue(node) : undefined;
},
collectLinkedAliases: collectLinkedAliases,
getReferencedValueDeclaration: getReferencedValueDeclaration,
getTypeReferenceSerializationKind: getTypeReferenceSerializationKind,
isOptionalParameter: isOptionalParameter,
moduleExportsSomeValue: moduleExportsSomeValue,
isArgumentsLocalBinding: isArgumentsLocalBinding,
getExternalModuleFileFromDeclaration: getExternalModuleFileFromDeclaration,
getTypeReferenceDirectivesForEntityName: getTypeReferenceDirectivesForEntityName,
getTypeReferenceDirectivesForSymbol: getTypeReferenceDirectivesForSymbol,
isLiteralConstDeclaration: isLiteralConstDeclaration,
writeLiteralConstValue: writeLiteralConstValue,
getJsxFactoryEntity: function () { return _jsxFactoryEntity; }
};
function getTypeReferenceDirectivesForEntityName(node) {
if (!fileToDirective) {
return undefined;
}
var meaning = (node.kind === 179) || (node.kind === 71 && isInTypeQuery(node))
? 107455 | 1048576
: 793064 | 1920;
var symbol = resolveEntityName(node, meaning, true);
return symbol && symbol !== unknownSymbol ? getTypeReferenceDirectivesForSymbol(symbol, meaning) : undefined;
}
function getTypeReferenceDirectivesForSymbol(symbol, meaning) {
if (!fileToDirective) {
return undefined;
}
if (!isSymbolFromTypeDeclarationFile(symbol)) {
return undefined;
}
var typeReferenceDirectives;
for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
var decl = _a[_i];
if (decl.symbol && decl.symbol.flags & meaning) {
var file = ts.getSourceFileOfNode(decl);
var typeReferenceDirective = fileToDirective.get(file.path);
if (typeReferenceDirective) {
(typeReferenceDirectives || (typeReferenceDirectives = [])).push(typeReferenceDirective);
}
else {
return undefined;
}
}
}
return typeReferenceDirectives;
}
function isSymbolFromTypeDeclarationFile(symbol) {
if (!symbol.declarations) {
return false;
}
var current = symbol;
while (true) {
var parent = getParentOfSymbol(current);
if (parent) {
current = parent;
}
else {
break;
}
}
if (current.valueDeclaration && current.valueDeclaration.kind === 265 && current.flags & 512) {
return false;
}
for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
var decl = _a[_i];
var file = ts.getSourceFileOfNode(decl);
if (fileToDirective.has(file.path)) {
return true;
}
}
return false;
}
}
function getExternalModuleFileFromDeclaration(declaration) {
var specifier = ts.getExternalModuleName(declaration);
var moduleSymbol = resolveExternalModuleNameWorker(specifier, specifier, undefined);
if (!moduleSymbol) {
return undefined;
}
return ts.getDeclarationOfKind(moduleSymbol, 265);
}
function initializeTypeChecker() {
for (var _i = 0, _a = host.getSourceFiles(); _i < _a.length; _i++) {
var file = _a[_i];
ts.bindSourceFile(file, compilerOptions);
}
var augmentations;
for (var _b = 0, _c = host.getSourceFiles(); _b < _c.length; _b++) {
var file = _c[_b];
if (!ts.isExternalOrCommonJsModule(file)) {
mergeSymbolTable(globals, file.locals);
}
if (file.patternAmbientModules && file.patternAmbientModules.length) {
patternAmbientModules = ts.concatenate(patternAmbientModules, file.patternAmbientModules);
}
if (file.moduleAugmentations.length) {
(augmentations || (augmentations = [])).push(file.moduleAugmentations);
}
if (file.symbol && file.symbol.globalExports) {
var source = file.symbol.globalExports;
source.forEach(function (sourceSymbol, id) {
if (!globals.has(id)) {
globals.set(id, sourceSymbol);
}
});
}
}
if (augmentations) {
for (var _d = 0, augmentations_1 = augmentations; _d < augmentations_1.length; _d++) {
var list = augmentations_1[_d];
for (var _e = 0, list_1 = list; _e < list_1.length; _e++) {
var augmentation = list_1[_e];
mergeModuleAugmentation(augmentation);
}
}
}
addToSymbolTable(globals, builtinGlobals, ts.Diagnostics.Declaration_name_conflicts_with_built_in_global_identifier_0);
getSymbolLinks(undefinedSymbol).type = undefinedWideningType;
getSymbolLinks(argumentsSymbol).type = getGlobalType("IArguments", 0, true);
getSymbolLinks(unknownSymbol).type = unknownType;
globalArrayType = getGlobalType("Array", 1, true);
globalObjectType = getGlobalType("Object", 0, true);
globalFunctionType = getGlobalType("Function", 0, true);
globalStringType = getGlobalType("String", 0, true);
globalNumberType = getGlobalType("Number", 0, true);
globalBooleanType = getGlobalType("Boolean", 0, true);
globalRegExpType = getGlobalType("RegExp", 0, true);
anyArrayType = createArrayType(anyType);
autoArrayType = createArrayType(autoType);
globalReadonlyArrayType = getGlobalTypeOrUndefined("ReadonlyArray", 1);
anyReadonlyArrayType = globalReadonlyArrayType ? createTypeFromGenericGlobalType(globalReadonlyArrayType, [anyType]) : anyArrayType;
globalThisType = getGlobalTypeOrUndefined("ThisType", 1);
}
function checkExternalEmitHelpers(location, helpers) {
if ((requestedExternalEmitHelpers & helpers) !== helpers && compilerOptions.importHelpers) {
var sourceFile = ts.getSourceFileOfNode(location);
if (ts.isEffectiveExternalModule(sourceFile, compilerOptions) && !ts.isInAmbientContext(location)) {
var helpersModule = resolveHelpersModule(sourceFile, location);
if (helpersModule !== unknownSymbol) {
var uncheckedHelpers = helpers & ~requestedExternalEmitHelpers;
for (var helper = 1; helper <= 65536; helper <<= 1) {
if (uncheckedHelpers & helper) {
var name = getHelperName(helper);
var symbol = getSymbol(helpersModule.exports, ts.escapeLeadingUnderscores(name), 107455);
if (!symbol) {
error(location, ts.Diagnostics.This_syntax_requires_an_imported_helper_named_1_but_module_0_has_no_exported_member_1, ts.externalHelpersModuleNameText, name);
}
}
}
}
requestedExternalEmitHelpers |= helpers;
}
}
}
function getHelperName(helper) {
switch (helper) {
case 1: return "__extends";
case 2: return "__assign";
case 4: return "__rest";
case 8: return "__decorate";
case 16: return "__metadata";
case 32: return "__param";
case 64: return "__awaiter";
case 128: return "__generator";
case 256: return "__values";
case 512: return "__read";
case 1024: return "__spread";
case 2048: return "__await";
case 4096: return "__asyncGenerator";
case 8192: return "__asyncDelegator";
case 16384: return "__asyncValues";
case 32768: return "__exportStar";
case 65536: return "__makeTemplateObject";
default: ts.Debug.fail("Unrecognized helper");
}
}
function resolveHelpersModule(node, errorNode) {
if (!externalHelpersModule) {
externalHelpersModule = resolveExternalModule(node, ts.externalHelpersModuleNameText, ts.Diagnostics.This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found, errorNode) || unknownSymbol;
}
return externalHelpersModule;
}
function checkGrammarDecorators(node) {
if (!node.decorators) {
return false;
}
if (!ts.nodeCanBeDecorated(node)) {
if (node.kind === 151 && !ts.nodeIsPresent(node.body)) {
return grammarErrorOnFirstToken(node, ts.Diagnostics.A_decorator_can_only_decorate_a_method_implementation_not_an_overload);
}
else {
return grammarErrorOnFirstToken(node, ts.Diagnostics.Decorators_are_not_valid_here);
}
}
else if (node.kind === 153 || node.kind === 154) {
var accessors = ts.getAllAccessorDeclarations(node.parent.members, node);
if (accessors.firstAccessor.decorators && node === accessors.secondAccessor) {
return grammarErrorOnFirstToken(node, ts.Diagnostics.Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name);
}
}
return false;
}
function checkGrammarModifiers(node) {
var quickResult = reportObviousModifierErrors(node);
if (quickResult !== undefined) {
return quickResult;
}
var lastStatic, lastDeclare, lastAsync, lastReadonly;
var flags = 0;
for (var _i = 0, _a = node.modifiers; _i < _a.length; _i++) {
var modifier = _a[_i];
if (modifier.kind !== 131) {
if (node.kind === 148 || node.kind === 150) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_type_member, ts.tokenToString(modifier.kind));
}
if (node.kind === 157) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_an_index_signature, ts.tokenToString(modifier.kind));
}
}
switch (modifier.kind) {
case 76:
if (node.kind !== 232 && node.parent.kind === 229) {
return grammarErrorOnNode(node, ts.Diagnostics.A_class_member_cannot_have_the_0_keyword, ts.tokenToString(76));
}
break;
case 114:
case 113:
case 112:
var text = visibilityToString(ts.modifierToFlag(modifier.kind));
if (flags & 28) {
return grammarErrorOnNode(modifier, ts.Diagnostics.Accessibility_modifier_already_seen);
}
else if (flags & 32) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, text, "static");
}
else if (flags & 64) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, text, "readonly");
}
else if (flags & 256) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, text, "async");
}
else if (node.parent.kind === 234 || node.parent.kind === 265) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element, text);
}
else if (flags & 128) {
if (modifier.kind === 112) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_with_1_modifier, text, "abstract");
}
else {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, text, "abstract");
}
}
flags |= ts.modifierToFlag(modifier.kind);
break;
case 115:
if (flags & 32) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "static");
}
else if (flags & 64) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "static", "readonly");
}
else if (flags & 256) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "static", "async");
}
else if (node.parent.kind === 234 || node.parent.kind === 265) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element, "static");
}
else if (node.kind === 146) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "static");
}
else if (flags & 128) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "static", "abstract");
}
flags |= 32;
lastStatic = modifier;
break;
case 131:
if (flags & 64) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "readonly");
}
else if (node.kind !== 149 && node.kind !== 148 && node.kind !== 157 && node.kind !== 146) {
return grammarErrorOnNode(modifier, ts.Diagnostics.readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature);
}
flags |= 64;
lastReadonly = modifier;
break;
case 84:
if (flags & 1) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "export");
}
else if (flags & 2) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "export", "declare");
}
else if (flags & 128) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "export", "abstract");
}
else if (flags & 256) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_must_precede_1_modifier, "export", "async");
}
else if (node.parent.kind === 229) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "export");
}
else if (node.kind === 146) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "export");
}
flags |= 1;
break;
case 79:
var container = node.parent.kind === 265 ? node.parent : node.parent.parent;
if (container.kind === 233 && !ts.isAmbientModule(container)) {
return grammarErrorOnNode(modifier, ts.Diagnostics.A_default_export_can_only_be_used_in_an_ECMAScript_style_module);
}
flags |= 512;
break;
case 124:
if (flags & 2) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "declare");
}
else if (flags & 256) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_in_an_ambient_context, "async");
}
else if (node.parent.kind === 229) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_class_element, "declare");
}
else if (node.kind === 146) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "declare");
}
else if (ts.isInAmbientContext(node.parent) && node.parent.kind === 234) {
return grammarErrorOnNode(modifier, ts.Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context);
}
flags |= 2;
lastDeclare = modifier;
break;
case 117:
if (flags & 128) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "abstract");
}
if (node.kind !== 229) {
if (node.kind !== 151 &&
node.kind !== 149 &&
node.kind !== 153 &&
node.kind !== 154) {
return grammarErrorOnNode(modifier, ts.Diagnostics.abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration);
}
if (!(node.parent.kind === 229 && ts.hasModifier(node.parent, 128))) {
return grammarErrorOnNode(modifier, ts.Diagnostics.Abstract_methods_can_only_appear_within_an_abstract_class);
}
if (flags & 32) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "static", "abstract");
}
if (flags & 8) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "private", "abstract");
}
}
flags |= 128;
break;
case 120:
if (flags & 256) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_already_seen, "async");
}
else if (flags & 2 || ts.isInAmbientContext(node.parent)) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_be_used_in_an_ambient_context, "async");
}
else if (node.kind === 146) {
return grammarErrorOnNode(modifier, ts.Diagnostics._0_modifier_cannot_appear_on_a_parameter, "async");
}
flags |= 256;
lastAsync = modifier;
break;
}
}
if (node.kind === 152) {
if (flags & 32) {
return grammarErrorOnNode(lastStatic, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "static");
}
if (flags & 128) {
return grammarErrorOnNode(lastStatic, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "abstract");
}
else if (flags & 256) {
return grammarErrorOnNode(lastAsync, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "async");
}
else if (flags & 64) {
return grammarErrorOnNode(lastReadonly, ts.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "readonly");
}
return;
}
else if ((node.kind === 238 || node.kind === 237) && flags & 2) {
return grammarErrorOnNode(lastDeclare, ts.Diagnostics.A_0_modifier_cannot_be_used_with_an_import_declaration, "declare");
}
else if (node.kind === 146 && (flags & 92) && ts.isBindingPattern(node.name)) {
return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_may_not_be_declared_using_a_binding_pattern);
}
else if (node.kind === 146 && (flags & 92) && node.dotDotDotToken) {
return grammarErrorOnNode(node, ts.Diagnostics.A_parameter_property_cannot_be_declared_using_a_rest_parameter);
}
if (flags & 256) {
return checkGrammarAsyncModifier(node, lastAsync);
}
}
function reportObviousModifierErrors(node) {
return !node.modifiers
? false
: shouldReportBadModifier(node)
? grammarErrorOnFirstToken(node, ts.Diagnostics.Modifiers_cannot_appear_here)
: undefined;
}
function shouldReportBadModifier(node) {
switch (node.kind) {
case 153:
case 154:
case 152:
case 149:
case 148:
case 151:
case 150:
case 157:
case 233:
case 238:
case 237:
case 244:
case 243:
case 186:
case 187:
case 146:
return false;
default:
if (node.parent.kind === 234 || node.parent.kind === 265) {
return false;
}
switch (node.kind) {
case 228:
return nodeHasAnyModifiersExcept(node, 120);
case 229:
return nodeHasAnyModifiersExcept(node, 117);
case 230:
case 208:
case 231:
return true;
case 232:
return nodeHasAnyModifiersExcept(node, 76);
default:
ts.Debug.fail();
return false;
}
}
}
function nodeHasAnyModifiersExcept(node, allowedModifier) {
return node.modifiers.length > 1 || node.modifiers[0].kind !== allowedModifier;
}
function checkGrammarAsyncModifier(node, asyncModifier) {
switch (node.kind) {
case 151:
case 228:
case 186:
case 187:
return false;
}
return grammarErrorOnNode(asyncModifier, ts.Diagnostics._0_modifier_cannot_be_used_here, "async");
}
function checkGrammarForDisallowedTrailingComma(list) {
if (list && list.hasTrailingComma) {
var start = list.end - ",".length;
var end = list.end;
return grammarErrorAtPos(list[0], start, end - start, ts.Diagnostics.Trailing_comma_not_allowed);
}
}
function checkGrammarTypeParameterList(typeParameters, file) {
if (checkGrammarForDisallowedTrailingComma(typeParameters)) {
return true;
}
if (typeParameters && typeParameters.length === 0) {
var start = typeParameters.pos - "<".length;
var end = ts.skipTrivia(file.text, typeParameters.end) + ">".length;
return grammarErrorAtPos(file, start, end - start, ts.Diagnostics.Type_parameter_list_cannot_be_empty);
}
}
function checkGrammarParameterList(parameters) {
var seenOptionalParameter = false;
var parameterCount = parameters.length;
for (var i = 0; i < parameterCount; i++) {
var parameter = parameters[i];
if (parameter.dotDotDotToken) {
if (i !== (parameterCount - 1)) {
return grammarErrorOnNode(parameter.dotDotDotToken, ts.Diagnostics.A_rest_parameter_must_be_last_in_a_parameter_list);
}
if (ts.isBindingPattern(parameter.name)) {
return grammarErrorOnNode(parameter.name, ts.Diagnostics.A_rest_element_cannot_contain_a_binding_pattern);
}
if (parameter.questionToken) {
return grammarErrorOnNode(parameter.questionToken, ts.Diagnostics.A_rest_parameter_cannot_be_optional);
}
if (parameter.initializer) {
return grammarErrorOnNode(parameter.name, ts.Diagnostics.A_rest_parameter_cannot_have_an_initializer);
}
}
else if (parameter.questionToken) {
seenOptionalParameter = true;
if (parameter.initializer) {
return grammarErrorOnNode(parameter.name, ts.Diagnostics.Parameter_cannot_have_question_mark_and_initializer);
}
}
else if (seenOptionalParameter && !parameter.initializer) {
return grammarErrorOnNode(parameter.name, ts.Diagnostics.A_required_parameter_cannot_follow_an_optional_parameter);
}
}
}
function checkGrammarFunctionLikeDeclaration(node) {
var file = ts.getSourceFileOfNode(node);
return checkGrammarDecorators(node) || checkGrammarModifiers(node) || checkGrammarTypeParameterList(node.typeParameters, file) ||
checkGrammarParameterList(node.parameters) || checkGrammarArrowFunction(node, file);
}
function checkGrammarClassLikeDeclaration(node) {
var file = ts.getSourceFileOfNode(node);
return checkGrammarClassDeclarationHeritageClauses(node) || checkGrammarTypeParameterList(node.typeParameters, file);
}
function checkGrammarArrowFunction(node, file) {
if (node.kind === 187) {
var arrowFunction = node;
var startLine = ts.getLineAndCharacterOfPosition(file, arrowFunction.equalsGreaterThanToken.pos).line;
var endLine = ts.getLineAndCharacterOfPosition(file, arrowFunction.equalsGreaterThanToken.end).line;
if (startLine !== endLine) {
return grammarErrorOnNode(arrowFunction.equalsGreaterThanToken, ts.Diagnostics.Line_terminator_not_permitted_before_arrow);
}
}
return false;
}
function checkGrammarIndexSignatureParameters(node) {
var parameter = node.parameters[0];
if (node.parameters.length !== 1) {
if (parameter) {
return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_must_have_exactly_one_parameter);
}
else {
return grammarErrorOnNode(node, ts.Diagnostics.An_index_signature_must_have_exactly_one_parameter);
}
}
if (parameter.dotDotDotToken) {
return grammarErrorOnNode(parameter.dotDotDotToken, ts.Diagnostics.An_index_signature_cannot_have_a_rest_parameter);
}
if (ts.hasModifiers(parameter)) {
return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_an_accessibility_modifier);
}
if (parameter.questionToken) {
return grammarErrorOnNode(parameter.questionToken, ts.Diagnostics.An_index_signature_parameter_cannot_have_a_question_mark);
}
if (parameter.initializer) {
return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_cannot_have_an_initializer);
}
if (!parameter.type) {
return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_must_have_a_type_annotation);
}
if (parameter.type.kind !== 136 && parameter.type.kind !== 133) {
return grammarErrorOnNode(parameter.name, ts.Diagnostics.An_index_signature_parameter_type_must_be_string_or_number);
}
if (!node.type) {
return grammarErrorOnNode(node, ts.Diagnostics.An_index_signature_must_have_a_type_annotation);
}
}
function checkGrammarIndexSignature(node) {
return checkGrammarDecorators(node) || checkGrammarModifiers(node) || checkGrammarIndexSignatureParameters(node);
}
function checkGrammarForAtLeastOneTypeArgument(node, typeArguments) {
if (typeArguments && typeArguments.length === 0) {
var sourceFile = ts.getSourceFileOfNode(node);
var start = typeArguments.pos - "<".length;
var end = ts.skipTrivia(sourceFile.text, typeArguments.end) + ">".length;
return grammarErrorAtPos(sourceFile, start, end - start, ts.Diagnostics.Type_argument_list_cannot_be_empty);
}
}
function checkGrammarTypeArguments(node, typeArguments) {
return checkGrammarForDisallowedTrailingComma(typeArguments) ||
checkGrammarForAtLeastOneTypeArgument(node, typeArguments);
}
function checkGrammarForOmittedArgument(args) {
if (args) {
for (var _i = 0, args_5 = args; _i < args_5.length; _i++) {
var arg = args_5[_i];
if (arg.kind === 200) {
return grammarErrorAtPos(arg, arg.pos, 0, ts.Diagnostics.Argument_expression_expected);
}
}
}
}
function checkGrammarArguments(args) {
return checkGrammarForOmittedArgument(args);
}
function checkGrammarHeritageClause(node) {
var types = node.types;
if (checkGrammarForDisallowedTrailingComma(types)) {
return true;
}
if (types && types.length === 0) {
var listType = ts.tokenToString(node.token);
return grammarErrorAtPos(node, types.pos, 0, ts.Diagnostics._0_list_cannot_be_empty, listType);
}
return ts.forEach(types, checkGrammarExpressionWithTypeArguments);
}
function checkGrammarExpressionWithTypeArguments(node) {
return checkGrammarTypeArguments(node, node.typeArguments);
}
function checkGrammarClassDeclarationHeritageClauses(node) {
var seenExtendsClause = false;
var seenImplementsClause = false;
if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && node.heritageClauses) {
for (var _i = 0, _a = node.heritageClauses; _i < _a.length; _i++) {
var heritageClause = _a[_i];
if (heritageClause.token === 85) {
if (seenExtendsClause) {
return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.extends_clause_already_seen);
}
if (seenImplementsClause) {
return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.extends_clause_must_precede_implements_clause);
}
if (heritageClause.types.length > 1) {
return grammarErrorOnFirstToken(heritageClause.types[1], ts.Diagnostics.Classes_can_only_extend_a_single_class);
}
seenExtendsClause = true;
}
else {
ts.Debug.assert(heritageClause.token === 108);
if (seenImplementsClause) {
return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.implements_clause_already_seen);
}
seenImplementsClause = true;
}
checkGrammarHeritageClause(heritageClause);
}
}
}
function checkGrammarInterfaceDeclaration(node) {
var seenExtendsClause = false;
if (node.heritageClauses) {
for (var _i = 0, _a = node.heritageClauses; _i < _a.length; _i++) {
var heritageClause = _a[_i];
if (heritageClause.token === 85) {
if (seenExtendsClause) {
return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.extends_clause_already_seen);
}
seenExtendsClause = true;
}
else {
ts.Debug.assert(heritageClause.token === 108);
return grammarErrorOnFirstToken(heritageClause, ts.Diagnostics.Interface_declaration_cannot_have_implements_clause);
}
checkGrammarHeritageClause(heritageClause);
}
}
return false;
}
function checkGrammarComputedPropertyName(node) {
if (node.kind !== 144) {
return false;
}
var computedPropertyName = node;
if (computedPropertyName.expression.kind === 194 && computedPropertyName.expression.operatorToken.kind === 26) {
return grammarErrorOnNode(computedPropertyName.expression, ts.Diagnostics.A_comma_expression_is_not_allowed_in_a_computed_property_name);
}
}
function checkGrammarForGenerator(node) {
if (node.asteriskToken) {
ts.Debug.assert(node.kind === 228 ||
node.kind === 186 ||
node.kind === 151);
if (ts.isInAmbientContext(node)) {
return grammarErrorOnNode(node.asteriskToken, ts.Diagnostics.Generators_are_not_allowed_in_an_ambient_context);
}
if (!node.body) {
return grammarErrorOnNode(node.asteriskToken, ts.Diagnostics.An_overload_signature_cannot_be_declared_as_a_generator);
}
}
}
function checkGrammarForInvalidQuestionMark(questionToken, message) {
if (questionToken) {
return grammarErrorOnNode(questionToken, message);
}
}
function checkGrammarObjectLiteralExpression(node, inDestructuring) {
var seen = ts.createUnderscoreEscapedMap();
var Property = 1;
var GetAccessor = 2;
var SetAccessor = 4;
var GetOrSetAccessor = GetAccessor | SetAccessor;
for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
var prop = _a[_i];
if (prop.kind === 263) {
continue;
}
var name = prop.name;
if (name.kind === 144) {
checkGrammarComputedPropertyName(name);
}
if (prop.kind === 262 && !inDestructuring && prop.objectAssignmentInitializer) {
return grammarErrorOnNode(prop.equalsToken, ts.Diagnostics.can_only_be_used_in_an_object_literal_property_inside_a_destructuring_assignment);
}
if (prop.modifiers) {
for (var _b = 0, _c = prop.modifiers; _b < _c.length; _b++) {
var mod = _c[_b];
if (mod.kind !== 120 || prop.kind !== 151) {
grammarErrorOnNode(mod, ts.Diagnostics._0_modifier_cannot_be_used_here, ts.getTextOfNode(mod));
}
}
}
var currentKind = void 0;
if (prop.kind === 261 || prop.kind === 262) {
checkGrammarForInvalidQuestionMark(prop.questionToken, ts.Diagnostics.An_object_member_cannot_be_declared_optional);
if (name.kind === 8) {
checkGrammarNumericLiteral(name);
}
currentKind = Property;
}
else if (prop.kind === 151) {
currentKind = Property;
}
else if (prop.kind === 153) {
currentKind = GetAccessor;
}
else if (prop.kind === 154) {
currentKind = SetAccessor;
}
else {
ts.Debug.assertNever(prop, "Unexpected syntax kind:" + prop.kind);
}
var effectiveName = ts.getPropertyNameForPropertyNameNode(name);
if (effectiveName === undefined) {
continue;
}
var existingKind = seen.get(effectiveName);
if (!existingKind) {
seen.set(effectiveName, currentKind);
}
else {
if (currentKind === Property && existingKind === Property) {
grammarErrorOnNode(name, ts.Diagnostics.Duplicate_identifier_0, ts.getTextOfNode(name));
}
else if ((currentKind & GetOrSetAccessor) && (existingKind & GetOrSetAccessor)) {
if (existingKind !== GetOrSetAccessor && currentKind !== existingKind) {
seen.set(effectiveName, currentKind | existingKind);
}
else {
return grammarErrorOnNode(name, ts.Diagnostics.An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name);
}
}
else {
return grammarErrorOnNode(name, ts.Diagnostics.An_object_literal_cannot_have_property_and_accessor_with_the_same_name);
}
}
}
}
function checkGrammarJsxElement(node) {
var seen = ts.createUnderscoreEscapedMap();
for (var _i = 0, _a = node.attributes.properties; _i < _a.length; _i++) {
var attr = _a[_i];
if (attr.kind === 255) {
continue;
}
var jsxAttr = attr;
var name = jsxAttr.name;
if (!seen.get(name.escapedText)) {
seen.set(name.escapedText, true);
}
else {
return grammarErrorOnNode(name, ts.Diagnostics.JSX_elements_cannot_have_multiple_attributes_with_the_same_name);
}
var initializer = jsxAttr.initializer;
if (initializer && initializer.kind === 256 && !initializer.expression) {
return grammarErrorOnNode(jsxAttr.initializer, ts.Diagnostics.JSX_attributes_must_only_be_assigned_a_non_empty_expression);
}
}
}
function checkGrammarForInOrForOfStatement(forInOrOfStatement) {
if (checkGrammarStatementInAmbientContext(forInOrOfStatement)) {
return true;
}
if (forInOrOfStatement.kind === 216 && forInOrOfStatement.awaitModifier) {
if ((forInOrOfStatement.flags & 16384) === 0) {
return grammarErrorOnNode(forInOrOfStatement.awaitModifier, ts.Diagnostics.A_for_await_of_statement_is_only_allowed_within_an_async_function_or_async_generator);
}
}
if (forInOrOfStatement.initializer.kind === 227) {
var variableList = forInOrOfStatement.initializer;
if (!checkGrammarVariableDeclarationList(variableList)) {
var declarations = variableList.declarations;
if (!declarations.length) {
return false;
}
if (declarations.length > 1) {
var diagnostic = forInOrOfStatement.kind === 215
? ts.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement
: ts.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement;
return grammarErrorOnFirstToken(variableList.declarations[1], diagnostic);
}
var firstDeclaration = declarations[0];
if (firstDeclaration.initializer) {
var diagnostic = forInOrOfStatement.kind === 215
? ts.Diagnostics.The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer
: ts.Diagnostics.The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer;
return grammarErrorOnNode(firstDeclaration.name, diagnostic);
}
if (firstDeclaration.type) {
var diagnostic = forInOrOfStatement.kind === 215
? ts.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation
: ts.Diagnostics.The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation;
return grammarErrorOnNode(firstDeclaration, diagnostic);
}
}
}
return false;
}
function checkGrammarAccessor(accessor) {
var kind = accessor.kind;
if (languageVersion < 1) {
return grammarErrorOnNode(accessor.name, ts.Diagnostics.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher);
}
else if (ts.isInAmbientContext(accessor)) {
return grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_be_declared_in_an_ambient_context);
}
else if (accessor.body === undefined && !ts.hasModifier(accessor, 128)) {
return grammarErrorAtPos(accessor, accessor.end - 1, ";".length, ts.Diagnostics._0_expected, "{");
}
else if (accessor.body && ts.hasModifier(accessor, 128)) {
return grammarErrorOnNode(accessor, ts.Diagnostics.An_abstract_accessor_cannot_have_an_implementation);
}
else if (accessor.typeParameters) {
return grammarErrorOnNode(accessor.name, ts.Diagnostics.An_accessor_cannot_have_type_parameters);
}
else if (!doesAccessorHaveCorrectParameterCount(accessor)) {
return grammarErrorOnNode(accessor.name, kind === 153 ?
ts.Diagnostics.A_get_accessor_cannot_have_parameters :
ts.Diagnostics.A_set_accessor_must_have_exactly_one_parameter);
}
else if (kind === 154) {
if (accessor.type) {
return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_cannot_have_a_return_type_annotation);
}
else {
var parameter = accessor.parameters[0];
if (parameter.dotDotDotToken) {
return grammarErrorOnNode(parameter.dotDotDotToken, ts.Diagnostics.A_set_accessor_cannot_have_rest_parameter);
}
else if (parameter.questionToken) {
return grammarErrorOnNode(parameter.questionToken, ts.Diagnostics.A_set_accessor_cannot_have_an_optional_parameter);
}
else if (parameter.initializer) {
return grammarErrorOnNode(accessor.name, ts.Diagnostics.A_set_accessor_parameter_cannot_have_an_initializer);
}
}
}
}
function doesAccessorHaveCorrectParameterCount(accessor) {
return getAccessorThisParameter(accessor) || accessor.parameters.length === (accessor.kind === 153 ? 0 : 1);
}
function getAccessorThisParameter(accessor) {
if (accessor.parameters.length === (accessor.kind === 153 ? 1 : 2)) {
return ts.getThisParameter(accessor);
}
}
function checkGrammarForNonSymbolComputedProperty(node, message) {
if (ts.isDynamicName(node)) {
return grammarErrorOnNode(node, message);
}
}
function checkGrammarMethod(node) {
if (checkGrammarDisallowedModifiersOnObjectLiteralExpressionMethod(node) ||
checkGrammarFunctionLikeDeclaration(node) ||
checkGrammarForGenerator(node)) {
return true;
}
if (node.parent.kind === 178) {
if (checkGrammarForInvalidQuestionMark(node.questionToken, ts.Diagnostics.An_object_member_cannot_be_declared_optional)) {
return true;
}
else if (node.body === undefined) {
return grammarErrorAtPos(node, node.end - 1, ";".length, ts.Diagnostics._0_expected, "{");
}
}
if (ts.isClassLike(node.parent)) {
if (ts.isInAmbientContext(node)) {
return checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_an_ambient_context_must_directly_refer_to_a_built_in_symbol);
}
else if (!node.body) {
return checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_a_method_overload_must_directly_refer_to_a_built_in_symbol);
}
}
else if (node.parent.kind === 230) {
return checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_an_interface_must_directly_refer_to_a_built_in_symbol);
}
else if (node.parent.kind === 163) {
return checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_a_type_literal_must_directly_refer_to_a_built_in_symbol);
}
}
function checkGrammarBreakOrContinueStatement(node) {
var current = node;
while (current) {
if (ts.isFunctionLike(current)) {
return grammarErrorOnNode(node, ts.Diagnostics.Jump_target_cannot_cross_function_boundary);
}
switch (current.kind) {
case 222:
if (node.label && current.label.escapedText === node.label.escapedText) {
var isMisplacedContinueLabel = node.kind === 217
&& !ts.isIterationStatement(current.statement, true);
if (isMisplacedContinueLabel) {
return grammarErrorOnNode(node, ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement);
}
return false;
}
break;
case 221:
if (node.kind === 218 && !node.label) {
return false;
}
break;
default:
if (ts.isIterationStatement(current, false) && !node.label) {
return false;
}
break;
}
current = current.parent;
}
if (node.label) {
var message = node.kind === 218
? ts.Diagnostics.A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement
: ts.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement;
return grammarErrorOnNode(node, message);
}
else {
var message = node.kind === 218
? ts.Diagnostics.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement
: ts.Diagnostics.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement;
return grammarErrorOnNode(node, message);
}
}
function checkGrammarBindingElement(node) {
if (node.dotDotDotToken) {
var elements = node.parent.elements;
if (node !== ts.lastOrUndefined(elements)) {
return grammarErrorOnNode(node, ts.Diagnostics.A_rest_element_must_be_last_in_a_destructuring_pattern);
}
if (node.name.kind === 175 || node.name.kind === 174) {
return grammarErrorOnNode(node.name, ts.Diagnostics.A_rest_element_cannot_contain_a_binding_pattern);
}
if (node.initializer) {
return grammarErrorAtPos(node, node.initializer.pos - 1, 1, ts.Diagnostics.A_rest_element_cannot_have_an_initializer);
}
}
}
function isStringOrNumberLiteralExpression(expr) {
return expr.kind === 9 || expr.kind === 8 ||
expr.kind === 192 && expr.operator === 38 &&
expr.operand.kind === 8;
}
function checkGrammarVariableDeclaration(node) {
if (node.parent.parent.kind !== 215 && node.parent.parent.kind !== 216) {
if (ts.isInAmbientContext(node)) {
if (node.initializer) {
if (ts.isConst(node) && !node.type) {
if (!isStringOrNumberLiteralExpression(node.initializer)) {
return grammarErrorOnNode(node.initializer, ts.Diagnostics.A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal);
}
}
else {
var equalsTokenLength = "=".length;
return grammarErrorAtPos(node, node.initializer.pos - equalsTokenLength, equalsTokenLength, ts.Diagnostics.Initializers_are_not_allowed_in_ambient_contexts);
}
}
if (node.initializer && !(ts.isConst(node) && isStringOrNumberLiteralExpression(node.initializer))) {
var equalsTokenLength = "=".length;
return grammarErrorAtPos(node, node.initializer.pos - equalsTokenLength, equalsTokenLength, ts.Diagnostics.Initializers_are_not_allowed_in_ambient_contexts);
}
}
else if (!node.initializer) {
if (ts.isBindingPattern(node.name) && !ts.isBindingPattern(node.parent)) {
return grammarErrorOnNode(node, ts.Diagnostics.A_destructuring_declaration_must_have_an_initializer);
}
if (ts.isConst(node)) {
return grammarErrorOnNode(node, ts.Diagnostics.const_declarations_must_be_initialized);
}
}
}
if (compilerOptions.module !== ts.ModuleKind.ES2015 && compilerOptions.module !== ts.ModuleKind.ESNext && compilerOptions.module !== ts.ModuleKind.System && !compilerOptions.noEmit &&
!ts.isInAmbientContext(node.parent.parent) && ts.hasModifier(node.parent.parent, 1)) {
checkESModuleMarker(node.name);
}
var checkLetConstNames = (ts.isLet(node) || ts.isConst(node));
return checkLetConstNames && checkGrammarNameInLetOrConstDeclarations(node.name);
}
function checkESModuleMarker(name) {
if (name.kind === 71) {
if (ts.idText(name) === "__esModule") {
return grammarErrorOnNode(name, ts.Diagnostics.Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules);
}
}
else {
var elements = name.elements;
for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {
var element = elements_1[_i];
if (!ts.isOmittedExpression(element)) {
return checkESModuleMarker(element.name);
}
}
}
}
function checkGrammarNameInLetOrConstDeclarations(name) {
if (name.kind === 71) {
if (name.originalKeywordKind === 110) {
return grammarErrorOnNode(name, ts.Diagnostics.let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations);
}
}
else {
var elements = name.elements;
for (var _i = 0, elements_2 = elements; _i < elements_2.length; _i++) {
var element = elements_2[_i];
if (!ts.isOmittedExpression(element)) {
checkGrammarNameInLetOrConstDeclarations(element.name);
}
}
}
}
function checkGrammarVariableDeclarationList(declarationList) {
var declarations = declarationList.declarations;
if (checkGrammarForDisallowedTrailingComma(declarationList.declarations)) {
return true;
}
if (!declarationList.declarations.length) {
return grammarErrorAtPos(declarationList, declarations.pos, declarations.end - declarations.pos, ts.Diagnostics.Variable_declaration_list_cannot_be_empty);
}
}
function allowLetAndConstDeclarations(parent) {
switch (parent.kind) {
case 211:
case 212:
case 213:
case 220:
case 214:
case 215:
case 216:
return false;
case 222:
return allowLetAndConstDeclarations(parent.parent);
}
return true;
}
function checkGrammarForDisallowedLetOrConstStatement(node) {
if (!allowLetAndConstDeclarations(node.parent)) {
if (ts.isLet(node.declarationList)) {
return grammarErrorOnNode(node, ts.Diagnostics.let_declarations_can_only_be_declared_inside_a_block);
}
else if (ts.isConst(node.declarationList)) {
return grammarErrorOnNode(node, ts.Diagnostics.const_declarations_can_only_be_declared_inside_a_block);
}
}
}
function checkGrammarMetaProperty(node) {
if (node.keywordToken === 94) {
if (node.name.escapedText !== "target") {
return grammarErrorOnNode(node.name, ts.Diagnostics._0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2, node.name.escapedText, ts.tokenToString(node.keywordToken), "target");
}
}
}
function hasParseDiagnostics(sourceFile) {
return sourceFile.parseDiagnostics.length > 0;
}
function grammarErrorOnFirstToken(node, message, arg0, arg1, arg2) {
var sourceFile = ts.getSourceFileOfNode(node);
if (!hasParseDiagnostics(sourceFile)) {
var span_4 = ts.getSpanOfTokenAtPosition(sourceFile, node.pos);
diagnostics.add(ts.createFileDiagnostic(sourceFile, span_4.start, span_4.length, message, arg0, arg1, arg2));
return true;
}
}
function grammarErrorAtPos(nodeForSourceFile, start, length, message, arg0, arg1, arg2) {
var sourceFile = ts.getSourceFileOfNode(nodeForSourceFile);
if (!hasParseDiagnostics(sourceFile)) {
diagnostics.add(ts.createFileDiagnostic(sourceFile, start, length, message, arg0, arg1, arg2));
return true;
}
}
function grammarErrorOnNode(node, message, arg0, arg1, arg2) {
var sourceFile = ts.getSourceFileOfNode(node);
if (!hasParseDiagnostics(sourceFile)) {
diagnostics.add(ts.createDiagnosticForNode(node, message, arg0, arg1, arg2));
return true;
}
}
function checkGrammarConstructorTypeParameters(node) {
if (node.typeParameters) {
return grammarErrorAtPos(node, node.typeParameters.pos, node.typeParameters.end - node.typeParameters.pos, ts.Diagnostics.Type_parameters_cannot_appear_on_a_constructor_declaration);
}
}
function checkGrammarConstructorTypeAnnotation(node) {
if (node.type) {
return grammarErrorOnNode(node.type, ts.Diagnostics.Type_annotation_cannot_appear_on_a_constructor_declaration);
}
}
function checkGrammarProperty(node) {
if (ts.isClassLike(node.parent)) {
if (checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_a_class_property_declaration_must_directly_refer_to_a_built_in_symbol)) {
return true;
}
}
else if (node.parent.kind === 230) {
if (checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_an_interface_must_directly_refer_to_a_built_in_symbol)) {
return true;
}
if (node.initializer) {
return grammarErrorOnNode(node.initializer, ts.Diagnostics.An_interface_property_cannot_have_an_initializer);
}
}
else if (node.parent.kind === 163) {
if (checkGrammarForNonSymbolComputedProperty(node.name, ts.Diagnostics.A_computed_property_name_in_a_type_literal_must_directly_refer_to_a_built_in_symbol)) {
return true;
}
if (node.initializer) {
return grammarErrorOnNode(node.initializer, ts.Diagnostics.A_type_literal_property_cannot_have_an_initializer);
}
}
if (ts.isInAmbientContext(node) && node.initializer) {
return grammarErrorOnFirstToken(node.initializer, ts.Diagnostics.Initializers_are_not_allowed_in_ambient_contexts);
}
}
function checkGrammarTopLevelElementForRequiredDeclareModifier(node) {
if (node.kind === 230 ||
node.kind === 231 ||
node.kind === 238 ||
node.kind === 237 ||
node.kind === 244 ||
node.kind === 243 ||
node.kind === 236 ||
ts.hasModifier(node, 2 | 1 | 512)) {
return false;
}
return grammarErrorOnFirstToken(node, ts.Diagnostics.A_declare_modifier_is_required_for_a_top_level_declaration_in_a_d_ts_file);
}
function checkGrammarTopLevelElementsForRequiredDeclareModifier(file) {
for (var _i = 0, _a = file.statements; _i < _a.length; _i++) {
var decl = _a[_i];
if (ts.isDeclaration(decl) || decl.kind === 208) {
if (checkGrammarTopLevelElementForRequiredDeclareModifier(decl)) {
return true;
}
}
}
}
function checkGrammarSourceFile(node) {
return ts.isInAmbientContext(node) && checkGrammarTopLevelElementsForRequiredDeclareModifier(node);
}
function checkGrammarStatementInAmbientContext(node) {
if (ts.isInAmbientContext(node)) {
if (ts.isAccessor(node.parent)) {
return getNodeLinks(node).hasReportedStatementInAmbientContext = true;
}
var links = getNodeLinks(node);
if (!links.hasReportedStatementInAmbientContext && ts.isFunctionLike(node.parent)) {
return getNodeLinks(node).hasReportedStatementInAmbientContext = grammarErrorOnFirstToken(node, ts.Diagnostics.An_implementation_cannot_be_declared_in_ambient_contexts);
}
if (node.parent.kind === 207 || node.parent.kind === 234 || node.parent.kind === 265) {
var links_1 = getNodeLinks(node.parent);
if (!links_1.hasReportedStatementInAmbientContext) {
return links_1.hasReportedStatementInAmbientContext = grammarErrorOnFirstToken(node, ts.Diagnostics.Statements_are_not_allowed_in_ambient_contexts);
}
}
else {
}
}
}
function checkGrammarNumericLiteral(node) {
if (node.numericLiteralFlags & 4) {
var diagnosticMessage = void 0;
if (languageVersion >= 1) {
diagnosticMessage = ts.Diagnostics.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_Use_the_syntax_0;
}
else if (ts.isChildOfNodeWithKind(node, 173)) {
diagnosticMessage = ts.Diagnostics.Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0;
}
else if (ts.isChildOfNodeWithKind(node, 264)) {
diagnosticMessage = ts.Diagnostics.Octal_literals_are_not_allowed_in_enums_members_initializer_Use_the_syntax_0;
}
if (diagnosticMessage) {
var withMinus = ts.isPrefixUnaryExpression(node.parent) && node.parent.operator === 38;
var literal = (withMinus ? "-" : "") + "0o" + node.text;
return grammarErrorOnNode(withMinus ? node.parent : node, diagnosticMessage, literal);
}
}
}
function grammarErrorAfterFirstToken(node, message, arg0, arg1, arg2) {
var sourceFile = ts.getSourceFileOfNode(node);
if (!hasParseDiagnostics(sourceFile)) {
var span_5 = ts.getSpanOfTokenAtPosition(sourceFile, node.pos);
diagnostics.add(ts.createFileDiagnostic(sourceFile, ts.textSpanEnd(span_5), 0, message, arg0, arg1, arg2));
return true;
}
}
function getAmbientModules() {
if (!ambientModulesCache) {
ambientModulesCache = [];
globals.forEach(function (global, sym) {
if (ambientModuleSymbolRegex.test(sym)) {
ambientModulesCache.push(global);
}
});
}
return ambientModulesCache;
}
function checkGrammarImportCallExpression(node) {
if (modulekind === ts.ModuleKind.ES2015) {
return grammarErrorOnNode(node, ts.Diagnostics.Dynamic_import_cannot_be_used_when_targeting_ECMAScript_2015_modules);
}
if (node.typeArguments) {
return grammarErrorOnNode(node, ts.Diagnostics.Dynamic_import_cannot_have_type_arguments);
}
var nodeArguments = node.arguments;
if (nodeArguments.length !== 1) {
return grammarErrorOnNode(node, ts.Diagnostics.Dynamic_import_must_have_one_specifier_as_an_argument);
}
if (ts.isSpreadElement(nodeArguments[0])) {
return grammarErrorOnNode(nodeArguments[0], ts.Diagnostics.Specifier_of_dynamic_import_cannot_be_spread_element);
}
}
}
ts.createTypeChecker = createTypeChecker;
function isDeclarationNameOrImportPropertyName(name) {
switch (name.parent.kind) {
case 242:
case 246:
return true;
default:
return ts.isDeclarationName(name);
}
}
function isSomeImportDeclaration(decl) {
switch (decl.kind) {
case 239:
case 237:
case 240:
case 242:
return true;
case 71:
return decl.parent.kind === 242;
default:
return false;
}
}
})(ts || (ts = {}));
var ts;
(function (ts) {
function createSynthesizedNode(kind) {
var node = ts.createNode(kind, -1, -1);
node.flags |= 8;
return node;
}
function updateNode(updated, original) {
if (updated !== original) {
setOriginalNode(updated, original);
setTextRange(updated, original);
if (original.startsOnNewLine) {
updated.startsOnNewLine = true;
}
ts.aggregateTransformFlags(updated);
}
return updated;
}
ts.updateNode = updateNode;
function createNodeArray(elements, hasTrailingComma) {
if (elements) {
if (ts.isNodeArray(elements)) {
return elements;
}
}
else {
elements = [];
}
var array = elements;
array.pos = -1;
array.end = -1;
array.hasTrailingComma = hasTrailingComma;
return array;
}
ts.createNodeArray = createNodeArray;
function getSynthesizedClone(node) {
if (node === undefined) {
return undefined;
}
var clone = createSynthesizedNode(node.kind);
clone.flags |= node.flags;
setOriginalNode(clone, node);
for (var key in node) {
if (clone.hasOwnProperty(key) || !node.hasOwnProperty(key)) {
continue;
}
clone[key] = node[key];
}
return clone;
}
ts.getSynthesizedClone = getSynthesizedClone;
function createLiteral(value) {
if (typeof value === "number") {
return createNumericLiteral(value + "");
}
if (typeof value === "boolean") {
return value ? createTrue() : createFalse();
}
if (ts.isString(value)) {
return createStringLiteral(value);
}
return createLiteralFromNode(value);
}
ts.createLiteral = createLiteral;
function createNumericLiteral(value) {
var node = createSynthesizedNode(8);
node.text = value;
node.numericLiteralFlags = 0;
return node;
}
ts.createNumericLiteral = createNumericLiteral;
function createStringLiteral(text) {
var node = createSynthesizedNode(9);
node.text = text;
return node;
}
function createLiteralFromNode(sourceNode) {
var node = createStringLiteral(ts.getTextOfIdentifierOrLiteral(sourceNode));
node.textSourceNode = sourceNode;
return node;
}
function createIdentifier(text, typeArguments) {
var node = createSynthesizedNode(71);
node.escapedText = ts.escapeLeadingUnderscores(text);
node.originalKeywordKind = text ? ts.stringToToken(text) : 0;
node.autoGenerateKind = 0;
node.autoGenerateId = 0;
if (typeArguments) {
node.typeArguments = createNodeArray(typeArguments);
}
return node;
}
ts.createIdentifier = createIdentifier;
function updateIdentifier(node, typeArguments) {
return node.typeArguments !== typeArguments
? updateNode(createIdentifier(ts.idText(node), typeArguments), node)
: node;
}
ts.updateIdentifier = updateIdentifier;
var nextAutoGenerateId = 0;
function createTempVariable(recordTempVariable) {
var name = createIdentifier("");
name.autoGenerateKind = 1;
name.autoGenerateId = nextAutoGenerateId;
nextAutoGenerateId++;
if (recordTempVariable) {
recordTempVariable(name);
}
return name;
}
ts.createTempVariable = createTempVariable;
function createLoopVariable() {
var name = createIdentifier("");
name.autoGenerateKind = 2;
name.autoGenerateId = nextAutoGenerateId;
nextAutoGenerateId++;
return name;
}
ts.createLoopVariable = createLoopVariable;
function createUniqueName(text) {
var name = createIdentifier(text);
name.autoGenerateKind = 3;
name.autoGenerateId = nextAutoGenerateId;
nextAutoGenerateId++;
return name;
}
ts.createUniqueName = createUniqueName;
function getGeneratedNameForNode(node) {
var name = createIdentifier("");
name.autoGenerateKind = 4;
name.autoGenerateId = nextAutoGenerateId;
name.original = node;
nextAutoGenerateId++;
return name;
}
ts.getGeneratedNameForNode = getGeneratedNameForNode;
function createToken(token) {
return createSynthesizedNode(token);
}
ts.createToken = createToken;
function createSuper() {
return createSynthesizedNode(97);
}
ts.createSuper = createSuper;
function createThis() {
return createSynthesizedNode(99);
}
ts.createThis = createThis;
function createNull() {
return createSynthesizedNode(95);
}
ts.createNull = createNull;
function createTrue() {
return createSynthesizedNode(101);
}
ts.createTrue = createTrue;
function createFalse() {
return createSynthesizedNode(86);
}
ts.createFalse = createFalse;
function createQualifiedName(left, right) {
var node = createSynthesizedNode(143);
node.left = left;
node.right = asName(right);
return node;
}
ts.createQualifiedName = createQualifiedName;
function updateQualifiedName(node, left, right) {
return node.left !== left
|| node.right !== right
? updateNode(createQualifiedName(left, right), node)
: node;
}
ts.updateQualifiedName = updateQualifiedName;
function createComputedPropertyName(expression) {
var node = createSynthesizedNode(144);
node.expression = expression;
return node;
}
ts.createComputedPropertyName = createComputedPropertyName;
function updateComputedPropertyName(node, expression) {
return node.expression !== expression
? updateNode(createComputedPropertyName(expression), node)
: node;
}
ts.updateComputedPropertyName = updateComputedPropertyName;
function createTypeParameterDeclaration(name, constraint, defaultType) {
var node = createSynthesizedNode(145);
node.name = asName(name);
node.constraint = constraint;
node.default = defaultType;
return node;
}
ts.createTypeParameterDeclaration = createTypeParameterDeclaration;
function updateTypeParameterDeclaration(node, name, constraint, defaultType) {
return node.name !== name
|| node.constraint !== constraint
|| node.default !== defaultType
? updateNode(createTypeParameterDeclaration(name, constraint, defaultType), node)
: node;
}
ts.updateTypeParameterDeclaration = updateTypeParameterDeclaration;
function createParameter(decorators, modifiers, dotDotDotToken, name, questionToken, type, initializer) {
var node = createSynthesizedNode(146);
node.decorators = asNodeArray(decorators);
node.modifiers = asNodeArray(modifiers);
node.dotDotDotToken = dotDotDotToken;
node.name = asName(name);
node.questionToken = questionToken;
node.type = type;
node.initializer = initializer ? ts.parenthesizeExpressionForList(initializer) : undefined;
return node;
}
ts.createParameter = createParameter;
function updateParameter(node, decorators, modifiers, dotDotDotToken, name, questionToken, type, initializer) {
return node.decorators !== decorators
|| node.modifiers !== modifiers
|| node.dotDotDotToken !== dotDotDotToken
|| node.name !== name
|| node.questionToken !== questionToken
|| node.type !== type
|| node.initializer !== initializer
? updateNode(createParameter(decorators, modifiers, dotDotDotToken, name, questionToken, type, initializer), node)
: node;
}
ts.updateParameter = updateParameter;
function createDecorator(expression) {
var node = createSynthesizedNode(147);
node.expression = ts.parenthesizeForAccess(expression);
return node;
}
ts.createDecorator = createDecorator;
function updateDecorator(node, expression) {
return node.expression !== expression
? updateNode(createDecorator(expression), node)
: node;
}
ts.updateDecorator = updateDecorator;
function createPropertySignature(modifiers, name, questionToken, type, initializer) {
var node = createSynthesizedNode(148);
node.modifiers = asNodeArray(modifiers);
node.name = asName(name);
node.questionToken = questionToken;
node.type = type;
node.initializer = initializer;
return node;
}
ts.createPropertySignature = createPropertySignature;
function updatePropertySignature(node, modifiers, name, questionToken, type, initializer) {
return node.modifiers !== modifiers
|| node.name !== name
|| node.questionToken !== questionToken
|| node.type !== type
|| node.initializer !== initializer
? updateNode(createPropertySignature(modifiers, name, questionToken, type, initializer), node)
: node;
}
ts.updatePropertySignature = updatePropertySignature;
function createProperty(decorators, modifiers, name, questionToken, type, initializer) {
var node = createSynthesizedNode(149);
node.decorators = asNodeArray(decorators);
node.modifiers = asNodeArray(modifiers);
node.name = asName(name);
node.questionToken = questionToken;
node.type = type;
node.initializer = initializer;
return node;
}
ts.createProperty = createProperty;
function updateProperty(node, decorators, modifiers, name, questionToken, type, initializer) {
return node.decorators !== decorators
|| node.modifiers !== modifiers
|| node.name !== name
|| node.questionToken !== questionToken
|| node.type !== type
|| node.initializer !== initializer
? updateNode(createProperty(decorators, modifiers, name, questionToken, type, initializer), node)
: node;
}
ts.updateProperty = updateProperty;
function createMethodSignature(typeParameters, parameters, type, name, questionToken) {
var node = createSignatureDeclaration(150, typeParameters, parameters, type);
node.name = asName(name);
node.questionToken = questionToken;
return node;
}
ts.createMethodSignature = createMethodSignature;
function updateMethodSignature(node, typeParameters, parameters, type, name, questionToken) {
return node.typeParameters !== typeParameters
|| node.parameters !== parameters
|| node.type !== type
|| node.name !== name
|| node.questionToken !== questionToken
? updateNode(createMethodSignature(typeParameters, parameters, type, name, questionToken), node)
: node;
}
ts.updateMethodSignature = updateMethodSignature;
function createMethod(decorators, modifiers, asteriskToken, name, questionToken, typeParameters, parameters, type, body) {
var node = createSynthesizedNode(151);
node.decorators = asNodeArray(decorators);
node.modifiers = asNodeArray(modifiers);
node.asteriskToken = asteriskToken;
node.name = asName(name);
node.questionToken = questionToken;
node.typeParameters = asNodeArray(typeParameters);
node.parameters = createNodeArray(parameters);
node.type = type;
node.body = body;
return node;
}
ts.createMethod = createMethod;
function updateMethod(node, decorators, modifiers, asteriskToken, name, questionToken, typeParameters, parameters, type, body) {
return node.decorators !== decorators
|| node.modifiers !== modifiers
|| node.asteriskToken !== asteriskToken
|| node.name !== name
|| node.questionToken !== questionToken
|| node.typeParameters !== typeParameters
|| node.parameters !== parameters
|| node.type !== type
|| node.body !== body
? updateNode(createMethod(decorators, modifiers, asteriskToken, name, questionToken, typeParameters, parameters, type, body), node)
: node;
}
ts.updateMethod = updateMethod;
function createConstructor(decorators, modifiers, parameters, body) {
var node = createSynthesizedNode(152);
node.decorators = asNodeArray(decorators);
node.modifiers = asNodeArray(modifiers);
node.typeParameters = undefined;
node.parameters = createNodeArray(parameters);
node.type = undefined;
node.body = body;
return node;
}
ts.createConstructor = createConstructor;
function updateConstructor(node, decorators, modifiers, parameters, body) {
return node.decorators !== decorators
|| node.modifiers !== modifiers
|| node.parameters !== parameters
|| node.body !== body
? updateNode(createConstructor(decorators, modifiers, parameters, body), node)
: node;
}
ts.updateConstructor = updateConstructor;
function createGetAccessor(decorators, modifiers, name, parameters, type, body) {
var node = createSynthesizedNode(153);
node.decorators = asNodeArray(decorators);
node.modifiers = asNodeArray(modifiers);
node.name = asName(name);
node.typeParameters = undefined;
node.parameters = createNodeArray(parameters);
node.type = type;
node.body = body;
return node;
}
ts.createGetAccessor = createGetAccessor;
function updateGetAccessor(node, decorators, modifiers, name, parameters, type, body) {
return node.decorators !== decorators
|| node.modifiers !== modifiers
|| node.name !== name
|| node.parameters !== parameters
|| node.type !== type
|| node.body !== body
? updateNode(createGetAccessor(decorators, modifiers, name, parameters, type, body), node)
: node;
}
ts.updateGetAccessor = updateGetAccessor;
function createSetAccessor(decorators, modifiers, name, parameters, body) {
var node = createSynthesizedNode(154);
node.decorators = asNodeArray(decorators);
node.modifiers = asNodeArray(modifiers);
node.name = asName(name);
node.typeParameters = undefined;
node.parameters = createNodeArray(parameters);
node.body = body;
return node;
}
ts.createSetAccessor = createSetAccessor;
function updateSetAccessor(node, decorators, modifiers, name, parameters, body) {
return node.decorators !== decorators
|| node.modifiers !== modifiers
|| node.name !== name
|| node.parameters !== parameters
|| node.body !== body
? updateNode(createSetAccessor(decorators, modifiers, name, parameters, body), node)
: node;
}
ts.updateSetAccessor = updateSetAccessor;
function createCallSignature(typeParameters, parameters, type) {
return createSignatureDeclaration(155, typeParameters, parameters, type);
}
ts.createCallSignature = createCallSignature;
function updateCallSignature(node, typeParameters, parameters, type) {
return updateSignatureDeclaration(node, typeParameters, parameters, type);
}
ts.updateCallSignature = updateCallSignature;
function createConstructSignature(typeParameters, parameters, type) {
return createSignatureDeclaration(156, typeParameters, parameters, type);
}
ts.createConstructSignature = createConstructSignature;
function updateConstructSignature(node, typeParameters, parameters, type) {
return updateSignatureDeclaration(node, typeParameters, parameters, type);
}
ts.updateConstructSignature = updateConstructSignature;
function createIndexSignature(decorators, modifiers, parameters, type) {
var node = createSynthesizedNode(157);
node.decorators = asNodeArray(decorators);
node.modifiers = asNodeArray(modifiers);
node.parameters = createNodeArray(parameters);
node.type = type;
return node;
}
ts.createIndexSignature = createIndexSignature;
function updateIndexSignature(node, decorators, modifiers, parameters, type) {
return node.parameters !== parameters
|| node.type !== type
|| node.decorators !== decorators
|| node.modifiers !== modifiers
? updateNode(createIndexSignature(decorators, modifiers, parameters, type), node)
: node;
}
ts.updateIndexSignature = updateIndexSignature;
function createSignatureDeclaration(kind, typeParameters, parameters, type) {
var node = createSynthesizedNode(kind);
node.typeParameters = asNodeArray(typeParameters);
node.parameters = asNodeArray(parameters);
node.type = type;
return node;
}
ts.createSignatureDeclaration = createSignatureDeclaration;
function updateSignatureDeclaration(node, typeParameters, parameters, type) {
return node.typeParameters !== typeParameters
|| node.parameters !== parameters
|| node.type !== type
? updateNode(createSignatureDeclaration(node.kind, typeParameters, parameters, type), node)
: node;
}
function createKeywordTypeNode(kind) {
return createSynthesizedNode(kind);
}
ts.createKeywordTypeNode = createKeywordTypeNode;
function createTypePredicateNode(parameterName, type) {
var node = createSynthesizedNode(158);
node.parameterName = asName(parameterName);
node.type = type;
return node;
}
ts.createTypePredicateNode = createTypePredicateNode;
function updateTypePredicateNode(node, parameterName, type) {
return node.parameterName !== parameterName
|| node.type !== type
? updateNode(createTypePredicateNode(parameterName, type), node)
: node;
}
ts.updateTypePredicateNode = updateTypePredicateNode;
function createTypeReferenceNode(typeName, typeArguments) {
var node = createSynthesizedNode(159);
node.typeName = asName(typeName);
node.typeArguments = typeArguments && ts.parenthesizeTypeParameters(typeArguments);
return node;
}
ts.createTypeReferenceNode = createTypeReferenceNode;
function updateTypeReferenceNode(node, typeName, typeArguments) {
return node.typeName !== typeName
|| node.typeArguments !== typeArguments
? updateNode(createTypeReferenceNode(typeName, typeArguments), node)
: node;
}
ts.updateTypeReferenceNode = updateTypeReferenceNode;
function createFunctionTypeNode(typeParameters, parameters, type) {
return createSignatureDeclaration(160, typeParameters, parameters, type);
}
ts.createFunctionTypeNode = createFunctionTypeNode;
function updateFunctionTypeNode(node, typeParameters, parameters, type) {
return updateSignatureDeclaration(node, typeParameters, parameters, type);
}
ts.updateFunctionTypeNode = updateFunctionTypeNode;
function createConstructorTypeNode(typeParameters, parameters, type) {
return createSignatureDeclaration(161, typeParameters, parameters, type);
}
ts.createConstructorTypeNode = createConstructorTypeNode;
function updateConstructorTypeNode(node, typeParameters, parameters, type) {
return updateSignatureDeclaration(node, typeParameters, parameters, type);
}
ts.updateConstructorTypeNode = updateConstructorTypeNode;
function createTypeQueryNode(exprName) {
var node = createSynthesizedNode(162);
node.exprName = exprName;
return node;
}
ts.createTypeQueryNode = createTypeQueryNode;
function updateTypeQueryNode(node, exprName) {
return node.exprName !== exprName
? updateNode(createTypeQueryNode(exprName), node)
: node;
}
ts.updateTypeQueryNode = updateTypeQueryNode;
function createTypeLiteralNode(members) {
var node = createSynthesizedNode(163);
node.members = createNodeArray(members);
return node;
}
ts.createTypeLiteralNode = createTypeLiteralNode;
function updateTypeLiteralNode(node, members) {
return node.members !== members
? updateNode(createTypeLiteralNode(members), node)
: node;
}
ts.updateTypeLiteralNode = updateTypeLiteralNode;
function createArrayTypeNode(elementType) {
var node = createSynthesizedNode(164);
node.elementType = ts.parenthesizeArrayTypeMember(elementType);
return node;
}
ts.createArrayTypeNode = createArrayTypeNode;
function updateArrayTypeNode(node, elementType) {
return node.elementType !== elementType
? updateNode(createArrayTypeNode(elementType), node)
: node;
}
ts.updateArrayTypeNode = updateArrayTypeNode;
function createTupleTypeNode(elementTypes) {
var node = createSynthesizedNode(165);
node.elementTypes = createNodeArray(elementTypes);
return node;
}
ts.createTupleTypeNode = createTupleTypeNode;
function updateTypleTypeNode(node, elementTypes) {
return node.elementTypes !== elementTypes
? updateNode(createTupleTypeNode(elementTypes), node)
: node;
}
ts.updateTypleTypeNode = updateTypleTypeNode;
function createUnionTypeNode(types) {
return createUnionOrIntersectionTypeNode(166, types);
}
ts.createUnionTypeNode = createUnionTypeNode;
function updateUnionTypeNode(node, types) {
return updateUnionOrIntersectionTypeNode(node, types);
}
ts.updateUnionTypeNode = updateUnionTypeNode;
function createIntersectionTypeNode(types) {
return createUnionOrIntersectionTypeNode(167, types);
}
ts.createIntersectionTypeNode = createIntersectionTypeNode;
function updateIntersectionTypeNode(node, types) {
return updateUnionOrIntersectionTypeNode(node, types);
}
ts.updateIntersectionTypeNode = updateIntersectionTypeNode;
function createUnionOrIntersectionTypeNode(kind, types) {
var node = createSynthesizedNode(kind);
node.types = ts.parenthesizeElementTypeMembers(types);
return node;
}
ts.createUnionOrIntersectionTypeNode = createUnionOrIntersectionTypeNode;
function updateUnionOrIntersectionTypeNode(node, types) {
return node.types !== types
? updateNode(createUnionOrIntersectionTypeNode(node.kind, types), node)
: node;
}
function createParenthesizedType(type) {
var node = createSynthesizedNode(168);
node.type = type;
return node;
}
ts.createParenthesizedType = createParenthesizedType;
function updateParenthesizedType(node, type) {
return node.type !== type
? updateNode(createParenthesizedType(type), node)
: node;
}
ts.updateParenthesizedType = updateParenthesizedType;
function createThisTypeNode() {
return createSynthesizedNode(169);
}
ts.createThisTypeNode = createThisTypeNode;
function createTypeOperatorNode(type) {
var node = createSynthesizedNode(170);
node.operator = 127;
node.type = ts.parenthesizeElementTypeMember(type);
return node;
}
ts.createTypeOperatorNode = createTypeOperatorNode;
function updateTypeOperatorNode(node, type) {
return node.type !== type ? updateNode(createTypeOperatorNode(type), node) : node;
}
ts.updateTypeOperatorNode = updateTypeOperatorNode;
function createIndexedAccessTypeNode(objectType, indexType) {
var node = createSynthesizedNode(171);
node.objectType = ts.parenthesizeElementTypeMember(objectType);
node.indexType = indexType;
return node;
}
ts.createIndexedAccessTypeNode = createIndexedAccessTypeNode;
function updateIndexedAccessTypeNode(node, objectType, indexType) {
return node.objectType !== objectType
|| node.indexType !== indexType
? updateNode(createIndexedAccessTypeNode(objectType, indexType), node)
: node;
}
ts.updateIndexedAccessTypeNode = updateIndexedAccessTypeNode;
function createMappedTypeNode(readonlyToken, typeParameter, questionToken, type) {
var node = createSynthesizedNode(172);
node.readonlyToken = readonlyToken;
node.typeParameter = typeParameter;
node.questionToken = questionToken;
node.type = type;
return node;
}
ts.createMappedTypeNode = createMappedTypeNode;
function updateMappedTypeNode(node, readonlyToken, typeParameter, questionToken, type) {
return node.readonlyToken !== readonlyToken
|| node.typeParameter !== typeParameter
|| node.questionToken !== questionToken
|| node.type !== type
? updateNode(createMappedTypeNode(readonlyToken, typeParameter, questionToken, type), node)
: node;
}
ts.updateMappedTypeNode = updateMappedTypeNode;
function createLiteralTypeNode(literal) {
var node = createSynthesizedNode(173);
node.literal = literal;
return node;
}
ts.createLiteralTypeNode = createLiteralTypeNode;
function updateLiteralTypeNode(node, literal) {
return node.literal !== literal
? updateNode(createLiteralTypeNode(literal), node)
: node;
}
ts.updateLiteralTypeNode = updateLiteralTypeNode;
function createObjectBindingPattern(elements) {
var node = createSynthesizedNode(174);
node.elements = createNodeArray(elements);
return node;
}
ts.createObjectBindingPattern = createObjectBindingPattern;
function updateObjectBindingPattern(node, elements) {
return node.elements !== elements
? updateNode(createObjectBindingPattern(elements), node)
: node;
}
ts.updateObjectBindingPattern = updateObjectBindingPattern;
function createArrayBindingPattern(elements) {
var node = createSynthesizedNode(175);
node.elements = createNodeArray(elements);
return node;
}
ts.createArrayBindingPattern = createArrayBindingPattern;
function updateArrayBindingPattern(node, elements) {
return node.elements !== elements
? updateNode(createArrayBindingPattern(elements), node)
: node;
}
ts.updateArrayBindingPattern = updateArrayBindingPattern;
function createBindingElement(dotDotDotToken, propertyName, name, initializer) {
var node = createSynthesizedNode(176);
node.dotDotDotToken = dotDotDotToken;
node.propertyName = asName(propertyName);
node.name = asName(name);
node.initializer = initializer;
return node;
}
ts.createBindingElement = createBindingElement;
function updateBindingElement(node, dotDotDotToken, propertyName, name, initializer) {
return node.propertyName !== propertyName
|| node.dotDotDotToken !== dotDotDotToken
|| node.name !== name
|| node.initializer !== initializer
? updateNode(createBindingElement(dotDotDotToken, propertyName, name, initializer), node)
: node;
}
ts.updateBindingElement = updateBindingElement;
function createArrayLiteral(elements, multiLine) {
var node = createSynthesizedNode(177);
node.elements = ts.parenthesizeListElements(createNodeArray(elements));
if (multiLine)
node.multiLine = true;
return node;
}
ts.createArrayLiteral = createArrayLiteral;
function updateArrayLiteral(node, elements) {
return node.elements !== elements
? updateNode(createArrayLiteral(elements, node.multiLine), node)
: node;
}
ts.updateArrayLiteral = updateArrayLiteral;
function createObjectLiteral(properties, multiLine) {
var node = createSynthesizedNode(178);
node.properties = createNodeArray(properties);
if (multiLine)
node.multiLine = true;
return node;
}
ts.createObjectLiteral = createObjectLiteral;
function updateObjectLiteral(node, properties) {
return node.properties !== properties
? updateNode(createObjectLiteral(properties, node.multiLine), node)
: node;
}
ts.updateObjectLiteral = updateObjectLiteral;
function createPropertyAccess(expression, name) {
var node = createSynthesizedNode(179);
node.expression = ts.parenthesizeForAccess(expression);
node.name = asName(name);
setEmitFlags(node, 131072);
return node;
}
ts.createPropertyAccess = createPropertyAccess;
function updatePropertyAccess(node, expression, name) {
return node.expression !== expression
|| node.name !== name
? updateNode(setEmitFlags(createPropertyAccess(expression, name), ts.getEmitFlags(node)), node)
: node;
}
ts.updatePropertyAccess = updatePropertyAccess;
function createElementAccess(expression, index) {
var node = createSynthesizedNode(180);
node.expression = ts.parenthesizeForAccess(expression);
node.argumentExpression = asExpression(index);
return node;
}
ts.createElementAccess = createElementAccess;
function updateElementAccess(node, expression, argumentExpression) {
return node.expression !== expression
|| node.argumentExpression !== argumentExpression
? updateNode(createElementAccess(expression, argumentExpression), node)
: node;
}
ts.updateElementAccess = updateElementAccess;
function createCall(expression, typeArguments, argumentsArray) {
var node = createSynthesizedNode(181);
node.expression = ts.parenthesizeForAccess(expression);
node.typeArguments = asNodeArray(typeArguments);
node.arguments = ts.parenthesizeListElements(createNodeArray(argumentsArray));
return node;
}
ts.createCall = createCall;
function updateCall(node, expression, typeArguments, argumentsArray) {
return node.expression !== expression
|| node.typeArguments !== typeArguments
|| node.arguments !== argumentsArray
? updateNode(createCall(expression, typeArguments, argumentsArray), node)
: node;
}
ts.updateCall = updateCall;
function createNew(expression, typeArguments, argumentsArray) {
var node = createSynthesizedNode(182);
node.expression = ts.parenthesizeForNew(expression);
node.typeArguments = asNodeArray(typeArguments);
node.arguments = argumentsArray ? ts.parenthesizeListElements(createNodeArray(argumentsArray)) : undefined;
return node;
}
ts.createNew = createNew;
function updateNew(node, expression, typeArguments, argumentsArray) {
return node.expression !== expression
|| node.typeArguments !== typeArguments
|| node.arguments !== argumentsArray
? updateNode(createNew(expression, typeArguments, argumentsArray), node)
: node;
}
ts.updateNew = updateNew;
function createTaggedTemplate(tag, template) {
var node = createSynthesizedNode(183);
node.tag = ts.parenthesizeForAccess(tag);
node.template = template;
return node;
}
ts.createTaggedTemplate = createTaggedTemplate;
function updateTaggedTemplate(node, tag, template) {
return node.tag !== tag
|| node.template !== template
? updateNode(createTaggedTemplate(tag, template), node)
: node;
}
ts.updateTaggedTemplate = updateTaggedTemplate;
function createTypeAssertion(type, expression) {
var node = createSynthesizedNode(184);
node.type = type;
node.expression = ts.parenthesizePrefixOperand(expression);
return node;
}
ts.createTypeAssertion = createTypeAssertion;
function updateTypeAssertion(node, type, expression) {
return node.type !== type
|| node.expression !== expression
? updateNode(createTypeAssertion(type, expression), node)
: node;
}
ts.updateTypeAssertion = updateTypeAssertion;
function createParen(expression) {
var node = createSynthesizedNode(185);
node.expression = expression;
return node;
}
ts.createParen = createParen;
function updateParen(node, expression) {
return node.expression !== expression
? updateNode(createParen(expression), node)
: node;
}
ts.updateParen = updateParen;
function createFunctionExpression(modifiers, asteriskToken, name, typeParameters, parameters, type, body) {
var node = createSynthesizedNode(186);
node.modifiers = asNodeArray(modifiers);
node.asteriskToken = asteriskToken;
node.name = asName(name);
node.typeParameters = asNodeArray(typeParameters);
node.parameters = createNodeArray(parameters);
node.type = type;
node.body = body;
return node;
}
ts.createFunctionExpression = createFunctionExpression;
function updateFunctionExpression(node, modifiers, asteriskToken, name, typeParameters, parameters, type, body) {
return node.name !== name
|| node.modifiers !== modifiers
|| node.asteriskToken !== asteriskToken
|| node.typeParameters !== typeParameters
|| node.parameters !== parameters
|| node.type !== type
|| node.body !== body
? updateNode(createFunctionExpression(modifiers, asteriskToken, name, typeParameters, parameters, type, body), node)
: node;
}
ts.updateFunctionExpression = updateFunctionExpression;
function createArrowFunction(modifiers, typeParameters, parameters, type, equalsGreaterThanToken, body) {
var node = createSynthesizedNode(187);
node.modifiers = asNodeArray(modifiers);
node.typeParameters = asNodeArray(typeParameters);
node.parameters = createNodeArray(parameters);
node.type = type;
node.equalsGreaterThanToken = equalsGreaterThanToken || createToken(36);
node.body = ts.parenthesizeConciseBody(body);
return node;
}
ts.createArrowFunction = createArrowFunction;
function updateArrowFunction(node, modifiers, typeParameters, parameters, type, equalsGreaterThanTokenOrBody, bodyOrUndefined) {
var equalsGreaterThanToken;
var body;
if (bodyOrUndefined === undefined) {
equalsGreaterThanToken = node.equalsGreaterThanToken;
body = ts.cast(equalsGreaterThanTokenOrBody, ts.isConciseBody);
}
else {
equalsGreaterThanToken = ts.cast(equalsGreaterThanTokenOrBody, function (n) {
return n.kind === 36;
});
body = bodyOrUndefined;
}
return node.modifiers !== modifiers
|| node.typeParameters !== typeParameters
|| node.parameters !== parameters
|| node.type !== type
|| node.equalsGreaterThanToken !== equalsGreaterThanToken
|| node.body !== body
? updateNode(createArrowFunction(modifiers, typeParameters, parameters, type, equalsGreaterThanToken, body), node)
: node;
}
ts.updateArrowFunction = updateArrowFunction;
function createDelete(expression) {
var node = createSynthesizedNode(188);
node.expression = ts.parenthesizePrefixOperand(expression);
return node;
}
ts.createDelete = createDelete;
function updateDelete(node, expression) {
return node.expression !== expression
? updateNode(createDelete(expression), node)
: node;
}
ts.updateDelete = updateDelete;
function createTypeOf(expression) {
var node = createSynthesizedNode(189);
node.expression = ts.parenthesizePrefixOperand(expression);
return node;
}
ts.createTypeOf = createTypeOf;
function updateTypeOf(node, expression) {
return node.expression !== expression
? updateNode(createTypeOf(expression), node)
: node;
}
ts.updateTypeOf = updateTypeOf;
function createVoid(expression) {
var node = createSynthesizedNode(190);
node.expression = ts.parenthesizePrefixOperand(expression);
return node;
}
ts.createVoid = createVoid;
function updateVoid(node, expression) {
return node.expression !== expression
? updateNode(createVoid(expression), node)
: node;
}
ts.updateVoid = updateVoid;
function createAwait(expression) {
var node = createSynthesizedNode(191);
node.expression = ts.parenthesizePrefixOperand(expression);
return node;
}
ts.createAwait = createAwait;
function updateAwait(node, expression) {
return node.expression !== expression
? updateNode(createAwait(expression), node)
: node;
}
ts.updateAwait = updateAwait;
function createPrefix(operator, operand) {
var node = createSynthesizedNode(192);
node.operator = operator;
node.operand = ts.parenthesizePrefixOperand(operand);
return node;
}
ts.createPrefix = createPrefix;
function updatePrefix(node, operand) {
return node.operand !== operand
? updateNode(createPrefix(node.operator, operand), node)
: node;
}
ts.updatePrefix = updatePrefix;
function createPostfix(operand, operator) {
var node = createSynthesizedNode(193);
node.operand = ts.parenthesizePostfixOperand(operand);
node.operator = operator;
return node;
}
ts.createPostfix = createPostfix;
function updatePostfix(node, operand) {
return node.operand !== operand
? updateNode(createPostfix(operand, node.operator), node)
: node;
}
ts.updatePostfix = updatePostfix;
function createBinary(left, operator, right) {
var node = createSynthesizedNode(194);
var operatorToken = asToken(operator);
var operatorKind = operatorToken.kind;
node.left = ts.parenthesizeBinaryOperand(operatorKind, left, true, undefined);
node.operatorToken = operatorToken;
node.right = ts.parenthesizeBinaryOperand(operatorKind, right, false, node.left);
return node;
}
ts.createBinary = createBinary;
function updateBinary(node, left, right, operator) {
return node.left !== left
|| node.right !== right
? updateNode(createBinary(left, operator || node.operatorToken, right), node)
: node;
}
ts.updateBinary = updateBinary;
function createConditional(condition, questionTokenOrWhenTrue, whenTrueOrWhenFalse, colonToken, whenFalse) {
var node = createSynthesizedNode(195);
node.condition = ts.parenthesizeForConditionalHead(condition);
node.questionToken = whenFalse ? questionTokenOrWhenTrue : createToken(55);
node.whenTrue = ts.parenthesizeSubexpressionOfConditionalExpression(whenFalse ? whenTrueOrWhenFalse : questionTokenOrWhenTrue);
node.colonToken = whenFalse ? colonToken : createToken(56);
node.whenFalse = ts.parenthesizeSubexpressionOfConditionalExpression(whenFalse ? whenFalse : whenTrueOrWhenFalse);
return node;
}
ts.createConditional = createConditional;
function updateConditional(node, condition) {
var args = [];
for (var _i = 2; _i < arguments.length; _i++) {
args[_i - 2] = arguments[_i];
}
if (args.length === 2) {
var whenTrue_1 = args[0], whenFalse_1 = args[1];
return updateConditional(node, condition, node.questionToken, whenTrue_1, node.colonToken, whenFalse_1);
}
ts.Debug.assert(args.length === 4);
var questionToken = args[0], whenTrue = args[1], colonToken = args[2], whenFalse = args[3];
return node.condition !== condition
|| node.questionToken !== questionToken
|| node.whenTrue !== whenTrue
|| node.colonToken !== colonToken
|| node.whenFalse !== whenFalse
? updateNode(createConditional(condition, questionToken, whenTrue, colonToken, whenFalse), node)
: node;
}
ts.updateConditional = updateConditional;
function createTemplateExpression(head, templateSpans) {
var node = createSynthesizedNode(196);
node.head = head;
node.templateSpans = createNodeArray(templateSpans);
return node;
}
ts.createTemplateExpression = createTemplateExpression;
function updateTemplateExpression(node, head, templateSpans) {
return node.head !== head
|| node.templateSpans !== templateSpans
? updateNode(createTemplateExpression(head, templateSpans), node)
: node;
}
ts.updateTemplateExpression = updateTemplateExpression;
function createTemplateHead(text) {
var node = createSynthesizedNode(14);
node.text = text;
return node;
}
ts.createTemplateHead = createTemplateHead;
function createTemplateMiddle(text) {
var node = createSynthesizedNode(15);
node.text = text;
return node;
}
ts.createTemplateMiddle = createTemplateMiddle;
function createTemplateTail(text) {
var node = createSynthesizedNode(16);
node.text = text;
return node;
}
ts.createTemplateTail = createTemplateTail;
function createNoSubstitutionTemplateLiteral(text) {
var node = createSynthesizedNode(13);
node.text = text;
return node;
}
ts.createNoSubstitutionTemplateLiteral = createNoSubstitutionTemplateLiteral;
function createYield(asteriskTokenOrExpression, expression) {
var node = createSynthesizedNode(197);
node.asteriskToken = asteriskTokenOrExpression && asteriskTokenOrExpression.kind === 39 ? asteriskTokenOrExpression : undefined;
node.expression = asteriskTokenOrExpression && asteriskTokenOrExpression.kind !== 39 ? asteriskTokenOrExpression : expression;
return node;
}
ts.createYield = createYield;
function updateYield(node, asteriskToken, expression) {
return node.expression !== expression
|| node.asteriskToken !== asteriskToken
? updateNode(createYield(asteriskToken, expression), node)
: node;
}
ts.updateYield = updateYield;
function createSpread(expression) {
var node = createSynthesizedNode(198);
node.expression = ts.parenthesizeExpressionForList(expression);
return node;
}
ts.createSpread = createSpread;
function updateSpread(node, expression) {
return node.expression !== expression
? updateNode(createSpread(expression), node)
: node;
}
ts.updateSpread = updateSpread;
function createClassExpression(modifiers, name, typeParameters, heritageClauses, members) {
var node = createSynthesizedNode(199);
node.decorators = undefined;
node.modifiers = asNodeArray(modifiers);
node.name = asName(name);
node.typeParameters = asNodeArray(typeParameters);
node.heritageClauses = asNodeArray(heritageClauses);
node.members = createNodeArray(members);
return node;
}
ts.createClassExpression = createClassExpression;
function updateClassExpression(node, modifiers, name, typeParameters, heritageClauses, members) {
return node.modifiers !== modifiers
|| node.name !== name
|| node.typeParameters !== typeParameters
|| node.heritageClauses !== heritageClauses
|| node.members !== members
? updateNode(createClassExpression(modifiers, name, typeParameters, heritageClauses, members), node)
: node;
}
ts.updateClassExpression = updateClassExpression;
function createOmittedExpression() {
return createSynthesizedNode(200);
}
ts.createOmittedExpression = createOmittedExpression;
function createExpressionWithTypeArguments(typeArguments, expression) {
var node = createSynthesizedNode(201);
node.expression = ts.parenthesizeForAccess(expression);
node.typeArguments = asNodeArray(typeArguments);
return node;
}
ts.createExpressionWithTypeArguments = createExpressionWithTypeArguments;
function updateExpressionWithTypeArguments(node, typeArguments, expression) {
return node.typeArguments !== typeArguments
|| node.expression !== expression
? updateNode(createExpressionWithTypeArguments(typeArguments, expression), node)
: node;
}
ts.updateExpressionWithTypeArguments = updateExpressionWithTypeArguments;
function createAsExpression(expression, type) {
var node = createSynthesizedNode(202);
node.expression = expression;
node.type = type;
return node;
}
ts.createAsExpression = createAsExpression;
function updateAsExpression(node, expression, type) {
return node.expression !== expression
|| node.type !== type
? updateNode(createAsExpression(expression, type), node)
: node;
}
ts.updateAsExpression = updateAsExpression;
function createNonNullExpression(expression) {
var node = createSynthesizedNode(203);
node.expression = ts.parenthesizeForAccess(expression);
return node;
}
ts.createNonNullExpression = createNonNullExpression;
function updateNonNullExpression(node, expression) {
return node.expression !== expression
? updateNode(createNonNullExpression(expression), node)
: node;
}
ts.updateNonNullExpression = updateNonNullExpression;
function createMetaProperty(keywordToken, name) {
var node = createSynthesizedNode(204);
node.keywordToken = keywordToken;
node.name = name;
return node;
}
ts.createMetaProperty = createMetaProperty;
function updateMetaProperty(node, name) {
return node.name !== name
? updateNode(createMetaProperty(node.keywordToken, name), node)
: node;
}
ts.updateMetaProperty = updateMetaProperty;
function createTemplateSpan(expression, literal) {
var node = createSynthesizedNode(205);
node.expression = expression;
node.literal = literal;
return node;
}
ts.createTemplateSpan = createTemplateSpan;
function updateTemplateSpan(node, expression, literal) {
return node.expression !== expression
|| node.literal !== literal
? updateNode(createTemplateSpan(expression, literal), node)
: node;
}
ts.updateTemplateSpan = updateTemplateSpan;
function createSemicolonClassElement() {
return createSynthesizedNode(206);
}
ts.createSemicolonClassElement = createSemicolonClassElement;
function createBlock(statements, multiLine) {
var block = createSynthesizedNode(207);
block.statements = createNodeArray(statements);
if (multiLine)
block.multiLine = multiLine;
return block;
}
ts.createBlock = createBlock;
function updateBlock(node, statements) {
return node.statements !== statements
? updateNode(createBlock(statements, node.multiLine), node)
: node;
}
ts.updateBlock = updateBlock;
function createVariableStatement(modifiers, declarationList) {
var node = createSynthesizedNode(208);
node.decorators = undefined;
node.modifiers = asNodeArray(modifiers);
node.declarationList = ts.isArray(declarationList) ? createVariableDeclarationList(declarationList) : declarationList;
return node;
}
ts.createVariableStatement = createVariableStatement;
function updateVariableStatement(node, modifiers, declarationList) {
return node.modifiers !== modifiers
|| node.declarationList !== declarationList
? updateNode(createVariableStatement(modifiers, declarationList), node)
: node;
}
ts.updateVariableStatement = updateVariableStatement;
function createEmptyStatement() {
return createSynthesizedNode(209);
}
ts.createEmptyStatement = createEmptyStatement;
function createStatement(expression) {
var node = createSynthesizedNode(210);
node.expression = ts.parenthesizeExpressionForExpressionStatement(expression);
return node;
}
ts.createStatement = createStatement;
function updateStatement(node, expression) {
return node.expression !== expression
? updateNode(createStatement(expression), node)
: node;
}
ts.updateStatement = updateStatement;
function createIf(expression, thenStatement, elseStatement) {
var node = createSynthesizedNode(211);
node.expression = expression;
node.thenStatement = thenStatement;
node.elseStatement = elseStatement;
return node;
}
ts.createIf = createIf;
function updateIf(node, expression, thenStatement, elseStatement) {
return node.expression !== expression
|| node.thenStatement !== thenStatement
|| node.elseStatement !== elseStatement
? updateNode(createIf(expression, thenStatement, elseStatement), node)
: node;
}
ts.updateIf = updateIf;
function createDo(statement, expression) {
var node = createSynthesizedNode(212);
node.statement = statement;
node.expression = expression;
return node;
}
ts.createDo = createDo;
function updateDo(node, statement, expression) {
return node.statement !== statement
|| node.expression !== expression
? updateNode(createDo(statement, expression), node)
: node;
}
ts.updateDo = updateDo;
function createWhile(expression, statement) {
var node = createSynthesizedNode(213);
node.expression = expression;
node.statement = statement;
return node;
}
ts.createWhile = createWhile;
function updateWhile(node, expression, statement) {
return node.expression !== expression
|| node.statement !== statement
? updateNode(createWhile(expression, statement), node)
: node;
}
ts.updateWhile = updateWhile;
function createFor(initializer, condition, incrementor, statement) {
var node = createSynthesizedNode(214);
node.initializer = initializer;
node.condition = condition;
node.incrementor = incrementor;
node.statement = statement;
return node;
}
ts.createFor = createFor;
function updateFor(node, initializer, condition, incrementor, statement) {
return node.initializer !== initializer
|| node.condition !== condition
|| node.incrementor !== incrementor
|| node.statement !== statement
? updateNode(createFor(initializer, condition, incrementor, statement), node)
: node;
}
ts.updateFor = updateFor;
function createForIn(initializer, expression, statement) {
var node = createSynthesizedNode(215);
node.initializer = initializer;
node.expression = expression;
node.statement = statement;
return node;
}
ts.createForIn = createForIn;
function updateForIn(node, initializer, expression, statement) {
return node.initializer !== initializer
|| node.expression !== expression
|| node.statement !== statement
? updateNode(createForIn(initializer, expression, statement), node)
: node;
}
ts.updateForIn = updateForIn;
function createForOf(awaitModifier, initializer, expression, statement) {
var node = createSynthesizedNode(216);
node.awaitModifier = awaitModifier;
node.initializer = initializer;
node.expression = expression;
node.statement = statement;
return node;
}
ts.createForOf = createForOf;
function updateForOf(node, awaitModifier, initializer, expression, statement) {
return node.awaitModifier !== awaitModifier
|| node.initializer !== initializer
|| node.expression !== expression
|| node.statement !== statement
? updateNode(createForOf(awaitModifier, initializer, expression, statement), node)
: node;
}
ts.updateForOf = updateForOf;
function createContinue(label) {
var node = createSynthesizedNode(217);
node.label = asName(label);
return node;
}
ts.createContinue = createContinue;
function updateContinue(node, label) {
return node.label !== label
? updateNode(createContinue(label), node)
: node;
}
ts.updateContinue = updateContinue;
function createBreak(label) {
var node = createSynthesizedNode(218);
node.label = asName(label);
return node;
}
ts.createBreak = createBreak;
function updateBreak(node, label) {
return node.label !== label
? updateNode(createBreak(label), node)
: node;
}
ts.updateBreak = updateBreak;
function createReturn(expression) {
var node = createSynthesizedNode(219);
node.expression = expression;
return node;
}
ts.createReturn = createReturn;
function updateReturn(node, expression) {
return node.expression !== expression
? updateNode(createReturn(expression), node)
: node;
}
ts.updateReturn = updateReturn;
function createWith(expression, statement) {
var node = createSynthesizedNode(220);
node.expression = expression;
node.statement = statement;
return node;
}
ts.createWith = createWith;
function updateWith(node, expression, statement) {
return node.expression !== expression
|| node.statement !== statement
? updateNode(createWith(expression, statement), node)
: node;
}
ts.updateWith = updateWith;
function createSwitch(expression, caseBlock) {
var node = createSynthesizedNode(221);
node.expression = ts.parenthesizeExpressionForList(expression);
node.caseBlock = caseBlock;
return node;
}
ts.createSwitch = createSwitch;
function updateSwitch(node, expression, caseBlock) {
return node.expression !== expression
|| node.caseBlock !== caseBlock
? updateNode(createSwitch(expression, caseBlock), node)
: node;
}
ts.updateSwitch = updateSwitch;
function createLabel(label, statement) {
var node = createSynthesizedNode(222);
node.label = asName(label);
node.statement = statement;
return node;
}
ts.createLabel = createLabel;
function updateLabel(node, label, statement) {
return node.label !== label
|| node.statement !== statement
? updateNode(createLabel(label, statement), node)
: node;
}
ts.updateLabel = updateLabel;
function createThrow(expression) {
var node = createSynthesizedNode(223);
node.expression = expression;
return node;
}
ts.createThrow = createThrow;
function updateThrow(node, expression) {
return node.expression !== expression
? updateNode(createThrow(expression), node)
: node;
}
ts.updateThrow = updateThrow;
function createTry(tryBlock, catchClause, finallyBlock) {
var node = createSynthesizedNode(224);
node.tryBlock = tryBlock;
node.catchClause = catchClause;
node.finallyBlock = finallyBlock;
return node;
}
ts.createTry = createTry;
function updateTry(node, tryBlock, catchClause, finallyBlock) {
return node.tryBlock !== tryBlock
|| node.catchClause !== catchClause
|| node.finallyBlock !== finallyBlock
? updateNode(createTry(tryBlock, catchClause, finallyBlock), node)
: node;
}
ts.updateTry = updateTry;
function createDebuggerStatement() {
return createSynthesizedNode(225);
}
ts.createDebuggerStatement = createDebuggerStatement;
function createVariableDeclaration(name, type, initializer) {
var node = createSynthesizedNode(226);
node.name = asName(name);
node.type = type;
node.initializer = initializer !== undefined ? ts.parenthesizeExpressionForList(initializer) : undefined;
return node;
}
ts.createVariableDeclaration = createVariableDeclaration;
function updateVariableDeclaration(node, name, type, initializer) {
return node.name !== name
|| node.type !== type
|| node.initializer !== initializer
? updateNode(createVariableDeclaration(name, type, initializer), node)
: node;
}
ts.updateVariableDeclaration = updateVariableDeclaration;
function createVariableDeclarationList(declarations, flags) {
var node = createSynthesizedNode(227);
node.flags |= flags & 3;
node.declarations = createNodeArray(declarations);
return node;
}
ts.createVariableDeclarationList = createVariableDeclarationList;
function updateVariableDeclarationList(node, declarations) {
return node.declarations !== declarations
? updateNode(createVariableDeclarationList(declarations, node.flags), node)
: node;
}
ts.updateVariableDeclarationList = updateVariableDeclarationList;
function createFunctionDeclaration(decorators, modifiers, asteriskToken, name, typeParameters, parameters, type, body) {
var node = createSynthesizedNode(228);
node.decorators = asNodeArray(decorators);
node.modifiers = asNodeArray(modifiers);
node.asteriskToken = asteriskToken;
node.name = asName(name);
node.typeParameters = asNodeArray(typeParameters);
node.parameters = createNodeArray(parameters);
node.type = type;
node.body = body;
return node;
}
ts.createFunctionDeclaration = createFunctionDeclaration;
function updateFunctionDeclaration(node, decorators, modifiers, asteriskToken, name, typeParameters, parameters, type, body) {
return node.decorators !== decorators
|| node.modifiers !== modifiers
|| node.asteriskToken !== asteriskToken
|| node.name !== name
|| node.typeParameters !== typeParameters
|| node.parameters !== parameters
|| node.type !== type
|| node.body !== body
? updateNode(createFunctionDeclaration(decorators, modifiers, asteriskToken, name, typeParameters, parameters, type, body), node)
: node;
}
ts.updateFunctionDeclaration = updateFunctionDeclaration;
function createClassDeclaration(decorators, modifiers, name, typeParameters, heritageClauses, members) {
var node = createSynthesizedNode(229);
node.decorators = asNodeArray(decorators);
node.modifiers = asNodeArray(modifiers);
node.name = asName(name);
node.typeParameters = asNodeArray(typeParameters);
node.heritageClauses = asNodeArray(heritageClauses);
node.members = createNodeArray(members);
return node;
}
ts.createClassDeclaration = createClassDeclaration;
function updateClassDeclaration(node, decorators, modifiers, name, typeParameters, heritageClauses, members) {
return node.decorators !== decorators
|| node.modifiers !== modifiers
|| node.name !== name
|| node.typeParameters !== typeParameters
|| node.heritageClauses !== heritageClauses
|| node.members !== members
? updateNode(createClassDeclaration(decorators, modifiers, name, typeParameters, heritageClauses, members), node)
: node;
}
ts.updateClassDeclaration = updateClassDeclaration;
function createInterfaceDeclaration(decorators, modifiers, name, typeParameters, heritageClauses, members) {
var node = createSynthesizedNode(230);
node.decorators = asNodeArray(decorators);
node.modifiers = asNodeArray(modifiers);
node.name = asName(name);
node.typeParameters = asNodeArray(typeParameters);
node.heritageClauses = asNodeArray(heritageClauses);
node.members = createNodeArray(members);
return node;
}
ts.createInterfaceDeclaration = createInterfaceDeclaration;
function updateInterfaceDeclaration(node, decorators, modifiers, name, typeParameters, heritageClauses, members) {
return node.decorators !== decorators
|| node.modifiers !== modifiers
|| node.name !== name
|| node.typeParameters !== typeParameters
|| node.heritageClauses !== heritageClauses
|| node.members !== members
? updateNode(createInterfaceDeclaration(decorators, modifiers, name, typeParameters, heritageClauses, members), node)
: node;
}
ts.updateInterfaceDeclaration = updateInterfaceDeclaration;
function createTypeAliasDeclaration(decorators, modifiers, name, typeParameters, type) {
var node = createSynthesizedNode(231);
node.decorators = asNodeArray(decorators);
node.modifiers = asNodeArray(modifiers);
node.name = asName(name);
node.typeParameters = asNodeArray(typeParameters);
node.type = type;
return node;
}
ts.createTypeAliasDeclaration = createTypeAliasDeclaration;
function updateTypeAliasDeclaration(node, decorators, modifiers, name, typeParameters, type) {
return node.decorators !== decorators
|| node.modifiers !== modifiers
|| node.name !== name
|| node.typeParameters !== typeParameters
|| node.type !== type
? updateNode(createTypeAliasDeclaration(decorators, modifiers, name, typeParameters, type), node)
: node;
}
ts.updateTypeAliasDeclaration = updateTypeAliasDeclaration;
function createEnumDeclaration(decorators, modifiers, name, members) {
var node = createSynthesizedNode(232);
node.decorators = asNodeArray(decorators);
node.modifiers = asNodeArray(modifiers);
node.name = asName(name);
node.members = createNodeArray(members);
return node;
}
ts.createEnumDeclaration = createEnumDeclaration;
function updateEnumDeclaration(node, decorators, modifiers, name, members) {
return node.decorators !== decorators
|| node.modifiers !== modifiers
|| node.name !== name
|| node.members !== members
? updateNode(createEnumDeclaration(decorators, modifiers, name, members), node)
: node;
}
ts.updateEnumDeclaration = updateEnumDeclaration;
function createModuleDeclaration(decorators, modifiers, name, body, flags) {
var node = createSynthesizedNode(233);
node.flags |= flags & (16 | 4 | 512);
node.decorators = asNodeArray(decorators);
node.modifiers = asNodeArray(modifiers);
node.name = name;
node.body = body;
return node;
}
ts.createModuleDeclaration = createModuleDeclaration;
function updateModuleDeclaration(node, decorators, modifiers, name, body) {
return node.decorators !== decorators
|| node.modifiers !== modifiers
|| node.name !== name
|| node.body !== body
? updateNode(createModuleDeclaration(decorators, modifiers, name, body, node.flags), node)
: node;
}
ts.updateModuleDeclaration = updateModuleDeclaration;
function createModuleBlock(statements) {
var node = createSynthesizedNode(234);
node.statements = createNodeArray(statements);
return node;
}
ts.createModuleBlock = createModuleBlock;
function updateModuleBlock(node, statements) {
return node.statements !== statements
? updateNode(createModuleBlock(statements), node)
: node;
}
ts.updateModuleBlock = updateModuleBlock;
function createCaseBlock(clauses) {
var node = createSynthesizedNode(235);
node.clauses = createNodeArray(clauses);
return node;
}
ts.createCaseBlock = createCaseBlock;
function updateCaseBlock(node, clauses) {
return node.clauses !== clauses
? updateNode(createCaseBlock(clauses), node)
: node;
}
ts.updateCaseBlock = updateCaseBlock;
function createNamespaceExportDeclaration(name) {
var node = createSynthesizedNode(236);
node.name = asName(name);
return node;
}
ts.createNamespaceExportDeclaration = createNamespaceExportDeclaration;
function updateNamespaceExportDeclaration(node, name) {
return node.name !== name
? updateNode(createNamespaceExportDeclaration(name), node)
: node;
}
ts.updateNamespaceExportDeclaration = updateNamespaceExportDeclaration;
function createImportEqualsDeclaration(decorators, modifiers, name, moduleReference) {
var node = createSynthesizedNode(237);
node.decorators = asNodeArray(decorators);
node.modifiers = asNodeArray(modifiers);
node.name = asName(name);
node.moduleReference = moduleReference;
return node;
}
ts.createImportEqualsDeclaration = createImportEqualsDeclaration;
function updateImportEqualsDeclaration(node, decorators, modifiers, name, moduleReference) {
return node.decorators !== decorators
|| node.modifiers !== modifiers
|| node.name !== name
|| node.moduleReference !== moduleReference
? updateNode(createImportEqualsDeclaration(decorators, modifiers, name, moduleReference), node)
: node;
}
ts.updateImportEqualsDeclaration = updateImportEqualsDeclaration;
function createImportDeclaration(decorators, modifiers, importClause, moduleSpecifier) {
var node = createSynthesizedNode(238);
node.decorators = asNodeArray(decorators);
node.modifiers = asNodeArray(modifiers);
node.importClause = importClause;
node.moduleSpecifier = moduleSpecifier;
return node;
}
ts.createImportDeclaration = createImportDeclaration;
function updateImportDeclaration(node, decorators, modifiers, importClause, moduleSpecifier) {
return node.decorators !== decorators
|| node.modifiers !== modifiers
|| node.importClause !== importClause
|| node.moduleSpecifier !== moduleSpecifier
? updateNode(createImportDeclaration(decorators, modifiers, importClause, moduleSpecifier), node)
: node;
}
ts.updateImportDeclaration = updateImportDeclaration;
function createImportClause(name, namedBindings) {
var node = createSynthesizedNode(239);
node.name = name;
node.namedBindings = namedBindings;
return node;
}
ts.createImportClause = createImportClause;
function updateImportClause(node, name, namedBindings) {
return node.name !== name
|| node.namedBindings !== namedBindings
? updateNode(createImportClause(name, namedBindings), node)
: node;
}
ts.updateImportClause = updateImportClause;
function createNamespaceImport(name) {
var node = createSynthesizedNode(240);
node.name = name;
return node;
}
ts.createNamespaceImport = createNamespaceImport;
function updateNamespaceImport(node, name) {
return node.name !== name
? updateNode(createNamespaceImport(name), node)
: node;
}
ts.updateNamespaceImport = updateNamespaceImport;
function createNamedImports(elements) {
var node = createSynthesizedNode(241);
node.elements = createNodeArray(elements);
return node;
}
ts.createNamedImports = createNamedImports;
function updateNamedImports(node, elements) {
return node.elements !== elements
? updateNode(createNamedImports(elements), node)
: node;
}
ts.updateNamedImports = updateNamedImports;
function createImportSpecifier(propertyName, name) {
var node = createSynthesizedNode(242);
node.propertyName = propertyName;
node.name = name;
return node;
}
ts.createImportSpecifier = createImportSpecifier;
function updateImportSpecifier(node, propertyName, name) {
return node.propertyName !== propertyName
|| node.name !== name
? updateNode(createImportSpecifier(propertyName, name), node)
: node;
}
ts.updateImportSpecifier = updateImportSpecifier;
function createExportAssignment(decorators, modifiers, isExportEquals, expression) {
var node = createSynthesizedNode(243);
node.decorators = asNodeArray(decorators);
node.modifiers = asNodeArray(modifiers);
node.isExportEquals = isExportEquals;
node.expression = expression;
return node;
}
ts.createExportAssignment = createExportAssignment;
function updateExportAssignment(node, decorators, modifiers, expression) {
return node.decorators !== decorators
|| node.modifiers !== modifiers
|| node.expression !== expression
? updateNode(createExportAssignment(decorators, modifiers, node.isExportEquals, expression), node)
: node;
}
ts.updateExportAssignment = updateExportAssignment;
function createExportDeclaration(decorators, modifiers, exportClause, moduleSpecifier) {
var node = createSynthesizedNode(244);
node.decorators = asNodeArray(decorators);
node.modifiers = asNodeArray(modifiers);
node.exportClause = exportClause;
node.moduleSpecifier = moduleSpecifier;
return node;
}
ts.createExportDeclaration = createExportDeclaration;
function updateExportDeclaration(node, decorators, modifiers, exportClause, moduleSpecifier) {
return node.decorators !== decorators
|| node.modifiers !== modifiers
|| node.exportClause !== exportClause
|| node.moduleSpecifier !== moduleSpecifier
? updateNode(createExportDeclaration(decorators, modifiers, exportClause, moduleSpecifier), node)
: node;
}
ts.updateExportDeclaration = updateExportDeclaration;
function createNamedExports(elements) {
var node = createSynthesizedNode(245);
node.elements = createNodeArray(elements);
return node;
}
ts.createNamedExports = createNamedExports;
function updateNamedExports(node, elements) {
return node.elements !== elements
? updateNode(createNamedExports(elements), node)
: node;
}
ts.updateNamedExports = updateNamedExports;
function createExportSpecifier(propertyName, name) {
var node = createSynthesizedNode(246);
node.propertyName = asName(propertyName);
node.name = asName(name);
return node;
}
ts.createExportSpecifier = createExportSpecifier;
function updateExportSpecifier(node, propertyName, name) {
return node.propertyName !== propertyName
|| node.name !== name
? updateNode(createExportSpecifier(propertyName, name), node)
: node;
}
ts.updateExportSpecifier = updateExportSpecifier;
function createExternalModuleReference(expression) {
var node = createSynthesizedNode(248);
node.expression = expression;
return node;
}
ts.createExternalModuleReference = createExternalModuleReference;
function updateExternalModuleReference(node, expression) {
return node.expression !== expression
? updateNode(createExternalModuleReference(expression), node)
: node;
}
ts.updateExternalModuleReference = updateExternalModuleReference;
function createJsxElement(openingElement, children, closingElement) {
var node = createSynthesizedNode(249);
node.openingElement = openingElement;
node.children = createNodeArray(children);
node.closingElement = closingElement;
return node;
}
ts.createJsxElement = createJsxElement;
function updateJsxElement(node, openingElement, children, closingElement) {
return node.openingElement !== openingElement
|| node.children !== children
|| node.closingElement !== closingElement
? updateNode(createJsxElement(openingElement, children, closingElement), node)
: node;
}
ts.updateJsxElement = updateJsxElement;
function createJsxSelfClosingElement(tagName, attributes) {
var node = createSynthesizedNode(250);
node.tagName = tagName;
node.attributes = attributes;
return node;
}
ts.createJsxSelfClosingElement = createJsxSelfClosingElement;
function updateJsxSelfClosingElement(node, tagName, attributes) {
return node.tagName !== tagName
|| node.attributes !== attributes
? updateNode(createJsxSelfClosingElement(tagName, attributes), node)
: node;
}
ts.updateJsxSelfClosingElement = updateJsxSelfClosingElement;
function createJsxOpeningElement(tagName, attributes) {
var node = createSynthesizedNode(251);
node.tagName = tagName;
node.attributes = attributes;
return node;
}
ts.createJsxOpeningElement = createJsxOpeningElement;
function updateJsxOpeningElement(node, tagName, attributes) {
return node.tagName !== tagName
|| node.attributes !== attributes
? updateNode(createJsxOpeningElement(tagName, attributes), node)
: node;
}
ts.updateJsxOpeningElement = updateJsxOpeningElement;
function createJsxClosingElement(tagName) {
var node = createSynthesizedNode(252);
node.tagName = tagName;
return node;
}
ts.createJsxClosingElement = createJsxClosingElement;
function updateJsxClosingElement(node, tagName) {
return node.tagName !== tagName
? updateNode(createJsxClosingElement(tagName), node)
: node;
}
ts.updateJsxClosingElement = updateJsxClosingElement;
function createJsxAttribute(name, initializer) {
var node = createSynthesizedNode(253);
node.name = name;
node.initializer = initializer;
return node;
}
ts.createJsxAttribute = createJsxAttribute;
function updateJsxAttribute(node, name, initializer) {
return node.name !== name
|| node.initializer !== initializer
? updateNode(createJsxAttribute(name, initializer), node)
: node;
}
ts.updateJsxAttribute = updateJsxAttribute;
function createJsxAttributes(properties) {
var node = createSynthesizedNode(254);
node.properties = createNodeArray(properties);
return node;
}
ts.createJsxAttributes = createJsxAttributes;
function updateJsxAttributes(node, properties) {
return node.properties !== properties
? updateNode(createJsxAttributes(properties), node)
: node;
}
ts.updateJsxAttributes = updateJsxAttributes;
function createJsxSpreadAttribute(expression) {
var node = createSynthesizedNode(255);
node.expression = expression;
return node;
}
ts.createJsxSpreadAttribute = createJsxSpreadAttribute;
function updateJsxSpreadAttribute(node, expression) {
return node.expression !== expression
? updateNode(createJsxSpreadAttribute(expression), node)
: node;
}
ts.updateJsxSpreadAttribute = updateJsxSpreadAttribute;
function createJsxExpression(dotDotDotToken, expression) {
var node = createSynthesizedNode(256);
node.dotDotDotToken = dotDotDotToken;
node.expression = expression;
return node;
}
ts.createJsxExpression = createJsxExpression;
function updateJsxExpression(node, expression) {
return node.expression !== expression
? updateNode(createJsxExpression(node.dotDotDotToken, expression), node)
: node;
}
ts.updateJsxExpression = updateJsxExpression;
function createCaseClause(expression, statements) {
var node = createSynthesizedNode(257);
node.expression = ts.parenthesizeExpressionForList(expression);
node.statements = createNodeArray(statements);
return node;
}
ts.createCaseClause = createCaseClause;
function updateCaseClause(node, expression, statements) {
return node.expression !== expression
|| node.statements !== statements
? updateNode(createCaseClause(expression, statements), node)
: node;
}
ts.updateCaseClause = updateCaseClause;
function createDefaultClause(statements) {
var node = createSynthesizedNode(258);
node.statements = createNodeArray(statements);
return node;
}
ts.createDefaultClause = createDefaultClause;
function updateDefaultClause(node, statements) {
return node.statements !== statements
? updateNode(createDefaultClause(statements), node)
: node;
}
ts.updateDefaultClause = updateDefaultClause;
function createHeritageClause(token, types) {
var node = createSynthesizedNode(259);
node.token = token;
node.types = createNodeArray(types);
return node;
}
ts.createHeritageClause = createHeritageClause;
function updateHeritageClause(node, types) {
return node.types !== types
? updateNode(createHeritageClause(node.token, types), node)
: node;
}
ts.updateHeritageClause = updateHeritageClause;
function createCatchClause(variableDeclaration, block) {
var node = createSynthesizedNode(260);
node.variableDeclaration = ts.isString(variableDeclaration) ? createVariableDeclaration(variableDeclaration) : variableDeclaration;
node.block = block;
return node;
}
ts.createCatchClause = createCatchClause;
function updateCatchClause(node, variableDeclaration, block) {
return node.variableDeclaration !== variableDeclaration
|| node.block !== block
? updateNode(createCatchClause(variableDeclaration, block), node)
: node;
}
ts.updateCatchClause = updateCatchClause;
function createPropertyAssignment(name, initializer) {
var node = createSynthesizedNode(261);
node.name = asName(name);
node.questionToken = undefined;
node.initializer = initializer !== undefined ? ts.parenthesizeExpressionForList(initializer) : undefined;
return node;
}
ts.createPropertyAssignment = createPropertyAssignment;
function updatePropertyAssignment(node, name, initializer) {
return node.name !== name
|| node.initializer !== initializer
? updateNode(createPropertyAssignment(name, initializer), node)
: node;
}
ts.updatePropertyAssignment = updatePropertyAssignment;
function createShorthandPropertyAssignment(name, objectAssignmentInitializer) {
var node = createSynthesizedNode(262);
node.name = asName(name);
node.objectAssignmentInitializer = objectAssignmentInitializer !== undefined ? ts.parenthesizeExpressionForList(objectAssignmentInitializer) : undefined;
return node;
}
ts.createShorthandPropertyAssignment = createShorthandPropertyAssignment;
function updateShorthandPropertyAssignment(node, name, objectAssignmentInitializer) {
return node.name !== name
|| node.objectAssignmentInitializer !== objectAssignmentInitializer
? updateNode(createShorthandPropertyAssignment(name, objectAssignmentInitializer), node)
: node;
}
ts.updateShorthandPropertyAssignment = updateShorthandPropertyAssignment;
function createSpreadAssignment(expression) {
var node = createSynthesizedNode(263);
node.expression = expression !== undefined ? ts.parenthesizeExpressionForList(expression) : undefined;
return node;
}
ts.createSpreadAssignment = createSpreadAssignment;
function updateSpreadAssignment(node, expression) {
return node.expression !== expression
? updateNode(createSpreadAssignment(expression), node)
: node;
}
ts.updateSpreadAssignment = updateSpreadAssignment;
function createEnumMember(name, initializer) {
var node = createSynthesizedNode(264);
node.name = asName(name);
node.initializer = initializer && ts.parenthesizeExpressionForList(initializer);
return node;
}
ts.createEnumMember = createEnumMember;
function updateEnumMember(node, name, initializer) {
return node.name !== name
|| node.initializer !== initializer
? updateNode(createEnumMember(name, initializer), node)
: node;
}
ts.updateEnumMember = updateEnumMember;
function updateSourceFileNode(node, statements) {
if (node.statements !== statements) {
var updated = createSynthesizedNode(265);
updated.flags |= node.flags;
updated.statements = createNodeArray(statements);
updated.endOfFileToken = node.endOfFileToken;
updated.fileName = node.fileName;
updated.path = node.path;
updated.text = node.text;
if (node.amdDependencies !== undefined)
updated.amdDependencies = node.amdDependencies;
if (node.moduleName !== undefined)
updated.moduleName = node.moduleName;
if (node.referencedFiles !== undefined)
updated.referencedFiles = node.referencedFiles;
if (node.typeReferenceDirectives !== undefined)
updated.typeReferenceDirectives = node.typeReferenceDirectives;
if (node.languageVariant !== undefined)
updated.languageVariant = node.languageVariant;
if (node.isDeclarationFile !== undefined)
updated.isDeclarationFile = node.isDeclarationFile;
if (node.renamedDependencies !== undefined)
updated.renamedDependencies = node.renamedDependencies;
if (node.hasNoDefaultLib !== undefined)
updated.hasNoDefaultLib = node.hasNoDefaultLib;
if (node.languageVersion !== undefined)
updated.languageVersion = node.languageVersion;
if (node.scriptKind !== undefined)
updated.scriptKind = node.scriptKind;
if (node.externalModuleIndicator !== undefined)
updated.externalModuleIndicator = node.externalModuleIndicator;
if (node.commonJsModuleIndicator !== undefined)
updated.commonJsModuleIndicator = node.commonJsModuleIndicator;
if (node.identifiers !== undefined)
updated.identifiers = node.identifiers;
if (node.nodeCount !== undefined)
updated.nodeCount = node.nodeCount;
if (node.identifierCount !== undefined)
updated.identifierCount = node.identifierCount;
if (node.symbolCount !== undefined)
updated.symbolCount = node.symbolCount;
if (node.parseDiagnostics !== undefined)
updated.parseDiagnostics = node.parseDiagnostics;
if (node.bindDiagnostics !== undefined)
updated.bindDiagnostics = node.bindDiagnostics;
if (node.lineMap !== undefined)
updated.lineMap = node.lineMap;
if (node.classifiableNames !== undefined)
updated.classifiableNames = node.classifiableNames;
if (node.resolvedModules !== undefined)
updated.resolvedModules = node.resolvedModules;
if (node.resolvedTypeReferenceDirectiveNames !== undefined)
updated.resolvedTypeReferenceDirectiveNames = node.resolvedTypeReferenceDirectiveNames;
if (node.imports !== undefined)
updated.imports = node.imports;
if (node.moduleAugmentations !== undefined)
updated.moduleAugmentations = node.moduleAugmentations;
return updateNode(updated, node);
}
return node;
}
ts.updateSourceFileNode = updateSourceFileNode;
function getMutableClone(node) {
var clone = getSynthesizedClone(node);
clone.pos = node.pos;
clone.end = node.end;
clone.parent = node.parent;
return clone;
}
ts.getMutableClone = getMutableClone;
function createNotEmittedStatement(original) {
var node = createSynthesizedNode(287);
node.original = original;
setTextRange(node, original);
return node;
}
ts.createNotEmittedStatement = createNotEmittedStatement;
function createEndOfDeclarationMarker(original) {
var node = createSynthesizedNode(291);
node.emitNode = {};
node.original = original;
return node;
}
ts.createEndOfDeclarationMarker = createEndOfDeclarationMarker;
function createMergeDeclarationMarker(original) {
var node = createSynthesizedNode(290);
node.emitNode = {};
node.original = original;
return node;
}
ts.createMergeDeclarationMarker = createMergeDeclarationMarker;
function createPartiallyEmittedExpression(expression, original) {
var node = createSynthesizedNode(288);
node.expression = expression;
node.original = original;
setTextRange(node, original);
return node;
}
ts.createPartiallyEmittedExpression = createPartiallyEmittedExpression;
function updatePartiallyEmittedExpression(node, expression) {
if (node.expression !== expression) {
return updateNode(createPartiallyEmittedExpression(expression, node.original), node);
}
return node;
}
ts.updatePartiallyEmittedExpression = updatePartiallyEmittedExpression;
function flattenCommaElements(node) {
if (ts.nodeIsSynthesized(node) && !ts.isParseTreeNode(node) && !node.original && !node.emitNode && !node.id) {
if (node.kind === 289) {
return node.elements;
}
if (ts.isBinaryExpression(node) && node.operatorToken.kind === 26) {
return [node.left, node.right];
}
}
return node;
}
function createCommaList(elements) {
var node = createSynthesizedNode(289);
node.elements = createNodeArray(ts.sameFlatMap(elements, flattenCommaElements));
return node;
}
ts.createCommaList = createCommaList;
function updateCommaList(node, elements) {
return node.elements !== elements
? updateNode(createCommaList(elements), node)
: node;
}
ts.updateCommaList = updateCommaList;
function createBundle(sourceFiles) {
var node = ts.createNode(266);
node.sourceFiles = sourceFiles;
return node;
}
ts.createBundle = createBundle;
function updateBundle(node, sourceFiles) {
if (node.sourceFiles !== sourceFiles) {
return createBundle(sourceFiles);
}
return node;
}
ts.updateBundle = updateBundle;
function createImmediatelyInvokedFunctionExpression(statements, param, paramValue) {
return createCall(createFunctionExpression(undefined, undefined, undefined, undefined, param ? [param] : [], undefined, createBlock(statements, true)), undefined, paramValue ? [paramValue] : []);
}
ts.createImmediatelyInvokedFunctionExpression = createImmediatelyInvokedFunctionExpression;
function createImmediatelyInvokedArrowFunction(statements, param, paramValue) {
return createCall(createArrowFunction(undefined, undefined, param ? [param] : [], undefined, undefined, createBlock(statements, true)), undefined, paramValue ? [paramValue] : []);
}
ts.createImmediatelyInvokedArrowFunction = createImmediatelyInvokedArrowFunction;
function createComma(left, right) {
return createBinary(left, 26, right);
}
ts.createComma = createComma;
function createLessThan(left, right) {
return createBinary(left, 27, right);
}
ts.createLessThan = createLessThan;
function createAssignment(left, right) {
return createBinary(left, 58, right);
}
ts.createAssignment = createAssignment;
function createStrictEquality(left, right) {
return createBinary(left, 34, right);
}
ts.createStrictEquality = createStrictEquality;
function createStrictInequality(left, right) {
return createBinary(left, 35, right);
}
ts.createStrictInequality = createStrictInequality;
function createAdd(left, right) {
return createBinary(left, 37, right);
}
ts.createAdd = createAdd;
function createSubtract(left, right) {
return createBinary(left, 38, right);
}
ts.createSubtract = createSubtract;
function createPostfixIncrement(operand) {
return createPostfix(operand, 43);
}
ts.createPostfixIncrement = createPostfixIncrement;
function createLogicalAnd(left, right) {
return createBinary(left, 53, right);
}
ts.createLogicalAnd = createLogicalAnd;
function createLogicalOr(left, right) {
return createBinary(left, 54, right);
}
ts.createLogicalOr = createLogicalOr;
function createLogicalNot(operand) {
return createPrefix(51, operand);
}
ts.createLogicalNot = createLogicalNot;
function createVoidZero() {
return createVoid(createLiteral(0));
}
ts.createVoidZero = createVoidZero;
function createExportDefault(expression) {
return createExportAssignment(undefined, undefined, false, expression);
}
ts.createExportDefault = createExportDefault;
function createExternalModuleExport(exportName) {
return createExportDeclaration(undefined, undefined, createNamedExports([createExportSpecifier(undefined, exportName)]));
}
ts.createExternalModuleExport = createExternalModuleExport;
function asName(name) {
return ts.isString(name) ? createIdentifier(name) : name;
}
function asExpression(value) {
return ts.isString(value) || typeof value === "number" ? createLiteral(value) : value;
}
function asNodeArray(array) {
return array ? createNodeArray(array) : undefined;
}
function asToken(value) {
return typeof value === "number" ? createToken(value) : value;
}
function disposeEmitNodes(sourceFile) {
sourceFile = ts.getSourceFileOfNode(ts.getParseTreeNode(sourceFile));
var emitNode = sourceFile && sourceFile.emitNode;
var annotatedNodes = emitNode && emitNode.annotatedNodes;
if (annotatedNodes) {
for (var _i = 0, annotatedNodes_1 = annotatedNodes; _i < annotatedNodes_1.length; _i++) {
var node = annotatedNodes_1[_i];
node.emitNode = undefined;
}
}
}
ts.disposeEmitNodes = disposeEmitNodes;
function getOrCreateEmitNode(node) {
if (!node.emitNode) {
if (ts.isParseTreeNode(node)) {
if (node.kind === 265) {
return node.emitNode = { annotatedNodes: [node] };
}
var sourceFile = ts.getSourceFileOfNode(node);
getOrCreateEmitNode(sourceFile).annotatedNodes.push(node);
}
node.emitNode = {};
}
return node.emitNode;
}
ts.getOrCreateEmitNode = getOrCreateEmitNode;
function setTextRange(range, location) {
if (location) {
range.pos = location.pos;
range.end = location.end;
}
return range;
}
ts.setTextRange = setTextRange;
function setEmitFlags(node, emitFlags) {
getOrCreateEmitNode(node).flags = emitFlags;
return node;
}
ts.setEmitFlags = setEmitFlags;
function addEmitFlags(node, emitFlags) {
var emitNode = getOrCreateEmitNode(node);
emitNode.flags = emitNode.flags | emitFlags;
return node;
}
ts.addEmitFlags = addEmitFlags;
function getSourceMapRange(node) {
var emitNode = node.emitNode;
return (emitNode && emitNode.sourceMapRange) || node;
}
ts.getSourceMapRange = getSourceMapRange;
function setSourceMapRange(node, range) {
getOrCreateEmitNode(node).sourceMapRange = range;
return node;
}
ts.setSourceMapRange = setSourceMapRange;
var SourceMapSource;
function createSourceMapSource(fileName, text, skipTrivia) {
return new (SourceMapSource || (SourceMapSource = ts.objectAllocator.getSourceMapSourceConstructor()))(fileName, text, skipTrivia);
}
ts.createSourceMapSource = createSourceMapSource;
function getTokenSourceMapRange(node, token) {
var emitNode = node.emitNode;
var tokenSourceMapRanges = emitNode && emitNode.tokenSourceMapRanges;
return tokenSourceMapRanges && tokenSourceMapRanges[token];
}
ts.getTokenSourceMapRange = getTokenSourceMapRange;
function setTokenSourceMapRange(node, token, range) {
var emitNode = getOrCreateEmitNode(node);
var tokenSourceMapRanges = emitNode.tokenSourceMapRanges || (emitNode.tokenSourceMapRanges = []);
tokenSourceMapRanges[token] = range;
return node;
}
ts.setTokenSourceMapRange = setTokenSourceMapRange;
function getCommentRange(node) {
var emitNode = node.emitNode;
return (emitNode && emitNode.commentRange) || node;
}
ts.getCommentRange = getCommentRange;
function setCommentRange(node, range) {
getOrCreateEmitNode(node).commentRange = range;
return node;
}
ts.setCommentRange = setCommentRange;
function getSyntheticLeadingComments(node) {
var emitNode = node.emitNode;
return emitNode && emitNode.leadingComments;
}
ts.getSyntheticLeadingComments = getSyntheticLeadingComments;
function setSyntheticLeadingComments(node, comments) {
getOrCreateEmitNode(node).leadingComments = comments;
return node;
}
ts.setSyntheticLeadingComments = setSyntheticLeadingComments;
function addSyntheticLeadingComment(node, kind, text, hasTrailingNewLine) {
return setSyntheticLeadingComments(node, ts.append(getSyntheticLeadingComments(node), { kind: kind, pos: -1, end: -1, hasTrailingNewLine: hasTrailingNewLine, text: text }));
}
ts.addSyntheticLeadingComment = addSyntheticLeadingComment;
function getSyntheticTrailingComments(node) {
var emitNode = node.emitNode;
return emitNode && emitNode.trailingComments;
}
ts.getSyntheticTrailingComments = getSyntheticTrailingComments;
function setSyntheticTrailingComments(node, comments) {
getOrCreateEmitNode(node).trailingComments = comments;
return node;
}
ts.setSyntheticTrailingComments = setSyntheticTrailingComments;
function addSyntheticTrailingComment(node, kind, text, hasTrailingNewLine) {
return setSyntheticTrailingComments(node, ts.append(getSyntheticTrailingComments(node), { kind: kind, pos: -1, end: -1, hasTrailingNewLine: hasTrailingNewLine, text: text }));
}
ts.addSyntheticTrailingComment = addSyntheticTrailingComment;
function getConstantValue(node) {
var emitNode = node.emitNode;
return emitNode && emitNode.constantValue;
}
ts.getConstantValue = getConstantValue;
function setConstantValue(node, value) {
var emitNode = getOrCreateEmitNode(node);
emitNode.constantValue = value;
return node;
}
ts.setConstantValue = setConstantValue;
function addEmitHelper(node, helper) {
var emitNode = getOrCreateEmitNode(node);
emitNode.helpers = ts.append(emitNode.helpers, helper);
return node;
}
ts.addEmitHelper = addEmitHelper;
function addEmitHelpers(node, helpers) {
if (ts.some(helpers)) {
var emitNode = getOrCreateEmitNode(node);
for (var _i = 0, helpers_1 = helpers; _i < helpers_1.length; _i++) {
var helper = helpers_1[_i];
emitNode.helpers = ts.appendIfUnique(emitNode.helpers, helper);
}
}
return node;
}
ts.addEmitHelpers = addEmitHelpers;
function removeEmitHelper(node, helper) {
var emitNode = node.emitNode;
if (emitNode) {
var helpers = emitNode.helpers;
if (helpers) {
return ts.orderedRemoveItem(helpers, helper);
}
}
return false;
}
ts.removeEmitHelper = removeEmitHelper;
function getEmitHelpers(node) {
var emitNode = node.emitNode;
return emitNode && emitNode.helpers;
}
ts.getEmitHelpers = getEmitHelpers;
function moveEmitHelpers(source, target, predicate) {
var sourceEmitNode = source.emitNode;
var sourceEmitHelpers = sourceEmitNode && sourceEmitNode.helpers;
if (!ts.some(sourceEmitHelpers))
return;
var targetEmitNode = getOrCreateEmitNode(target);
var helpersRemoved = 0;
for (var i = 0; i < sourceEmitHelpers.length; i++) {
var helper = sourceEmitHelpers[i];
if (predicate(helper)) {
helpersRemoved++;
targetEmitNode.helpers = ts.appendIfUnique(targetEmitNode.helpers, helper);
}
else if (helpersRemoved > 0) {
sourceEmitHelpers[i - helpersRemoved] = helper;
}
}
if (helpersRemoved > 0) {
sourceEmitHelpers.length -= helpersRemoved;
}
}
ts.moveEmitHelpers = moveEmitHelpers;
function compareEmitHelpers(x, y) {
if (x === y)
return 0;
if (x.priority === y.priority)
return 0;
if (x.priority === undefined)
return 1;
if (y.priority === undefined)
return -1;
return ts.compareValues(x.priority, y.priority);
}
ts.compareEmitHelpers = compareEmitHelpers;
function setOriginalNode(node, original) {
node.original = original;
if (original) {
var emitNode = original.emitNode;
if (emitNode)
node.emitNode = mergeEmitNode(emitNode, node.emitNode);
}
return node;
}
ts.setOriginalNode = setOriginalNode;
function mergeEmitNode(sourceEmitNode, destEmitNode) {
var flags = sourceEmitNode.flags, leadingComments = sourceEmitNode.leadingComments, trailingComments = sourceEmitNode.trailingComments, commentRange = sourceEmitNode.commentRange, sourceMapRange = sourceEmitNode.sourceMapRange, tokenSourceMapRanges = sourceEmitNode.tokenSourceMapRanges, constantValue = sourceEmitNode.constantValue, helpers = sourceEmitNode.helpers;
if (!destEmitNode)
destEmitNode = {};
if (leadingComments)
destEmitNode.leadingComments = ts.addRange(leadingComments.slice(), destEmitNode.leadingComments);
if (trailingComments)
destEmitNode.trailingComments = ts.addRange(trailingComments.slice(), destEmitNode.trailingComments);
if (flags)
destEmitNode.flags = flags;
if (commentRange)
destEmitNode.commentRange = commentRange;
if (sourceMapRange)
destEmitNode.sourceMapRange = sourceMapRange;
if (tokenSourceMapRanges)
destEmitNode.tokenSourceMapRanges = mergeTokenSourceMapRanges(tokenSourceMapRanges, destEmitNode.tokenSourceMapRanges);
if (constantValue !== undefined)
destEmitNode.constantValue = constantValue;
if (helpers)
destEmitNode.helpers = ts.addRange(destEmitNode.helpers, helpers);
return destEmitNode;
}
function mergeTokenSourceMapRanges(sourceRanges, destRanges) {
if (!destRanges)
destRanges = [];
for (var key in sourceRanges) {
destRanges[key] = sourceRanges[key];
}
return destRanges;
}
})(ts || (ts = {}));
(function (ts) {
ts.nullTransformationContext = {
enableEmitNotification: ts.noop,
enableSubstitution: ts.noop,
endLexicalEnvironment: function () { return undefined; },
getCompilerOptions: ts.notImplemented,
getEmitHost: ts.notImplemented,
getEmitResolver: ts.notImplemented,
hoistFunctionDeclaration: ts.noop,
hoistVariableDeclaration: ts.noop,
isEmitNotificationEnabled: ts.notImplemented,
isSubstitutionEnabled: ts.notImplemented,
onEmitNode: ts.noop,
onSubstituteNode: ts.notImplemented,
readEmitHelpers: ts.notImplemented,
requestEmitHelper: ts.noop,
resumeLexicalEnvironment: ts.noop,
startLexicalEnvironment: ts.noop,
suspendLexicalEnvironment: ts.noop
};
function createTypeCheck(value, tag) {
return tag === "undefined"
? ts.createStrictEquality(value, ts.createVoidZero())
: ts.createStrictEquality(ts.createTypeOf(value), ts.createLiteral(tag));
}
ts.createTypeCheck = createTypeCheck;
function createMemberAccessForPropertyName(target, memberName, location) {
if (ts.isComputedPropertyName(memberName)) {
return ts.setTextRange(ts.createElementAccess(target, memberName.expression), location);
}
else {
var expression = ts.setTextRange(ts.isIdentifier(memberName)
? ts.createPropertyAccess(target, memberName)
: ts.createElementAccess(target, memberName), memberName);
ts.getOrCreateEmitNode(expression).flags |= 64;
return expression;
}
}
ts.createMemberAccessForPropertyName = createMemberAccessForPropertyName;
function createFunctionCall(func, thisArg, argumentsList, location) {
return ts.setTextRange(ts.createCall(ts.createPropertyAccess(func, "call"), undefined, [
thisArg
].concat(argumentsList)), location);
}
ts.createFunctionCall = createFunctionCall;
function createFunctionApply(func, thisArg, argumentsExpression, location) {
return ts.setTextRange(ts.createCall(ts.createPropertyAccess(func, "apply"), undefined, [
thisArg,
argumentsExpression
]), location);
}
ts.createFunctionApply = createFunctionApply;
function createArraySlice(array, start) {
var argumentsList = [];
if (start !== undefined) {
argumentsList.push(typeof start === "number" ? ts.createLiteral(start) : start);
}
return ts.createCall(ts.createPropertyAccess(array, "slice"), undefined, argumentsList);
}
ts.createArraySlice = createArraySlice;
function createArrayConcat(array, values) {
return ts.createCall(ts.createPropertyAccess(array, "concat"), undefined, values);
}
ts.createArrayConcat = createArrayConcat;
function createMathPow(left, right, location) {
return ts.setTextRange(ts.createCall(ts.createPropertyAccess(ts.createIdentifier("Math"), "pow"), undefined, [left, right]), location);
}
ts.createMathPow = createMathPow;
function createReactNamespace(reactNamespace, parent) {
var react = ts.createIdentifier(reactNamespace || "React");
react.flags &= ~8;
react.parent = ts.getParseTreeNode(parent);
return react;
}
function createJsxFactoryExpressionFromEntityName(jsxFactory, parent) {
if (ts.isQualifiedName(jsxFactory)) {
var left = createJsxFactoryExpressionFromEntityName(jsxFactory.left, parent);
var right = ts.createIdentifier(ts.idText(jsxFactory.right));
right.escapedText = jsxFactory.right.escapedText;
return ts.createPropertyAccess(left, right);
}
else {
return createReactNamespace(ts.idText(jsxFactory), parent);
}
}
function createJsxFactoryExpression(jsxFactoryEntity, reactNamespace, parent) {
return jsxFactoryEntity ?
createJsxFactoryExpressionFromEntityName(jsxFactoryEntity, parent) :
ts.createPropertyAccess(createReactNamespace(reactNamespace, parent), "createElement");
}
function createExpressionForJsxElement(jsxFactoryEntity, reactNamespace, tagName, props, children, parentElement, location) {
var argumentsList = [tagName];
if (props) {
argumentsList.push(props);
}
if (children && children.length > 0) {
if (!props) {
argumentsList.push(ts.createNull());
}
if (children.length > 1) {
for (var _i = 0, children_1 = children; _i < children_1.length; _i++) {
var child = children_1[_i];
child.startsOnNewLine = true;
argumentsList.push(child);
}
}
else {
argumentsList.push(children[0]);
}
}
return ts.setTextRange(ts.createCall(createJsxFactoryExpression(jsxFactoryEntity, reactNamespace, parentElement), undefined, argumentsList), location);
}
ts.createExpressionForJsxElement = createExpressionForJsxElement;
function getHelperName(name) {
return ts.setEmitFlags(ts.createIdentifier(name), 4096 | 2);
}
ts.getHelperName = getHelperName;
var valuesHelper = {
name: "typescript:values",
scoped: false,
text: "\n var __values = (this && this.__values) || function (o) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\n if (m) return m.call(o);\n return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n };\n "
};
function createValuesHelper(context, expression, location) {
context.requestEmitHelper(valuesHelper);
return ts.setTextRange(ts.createCall(getHelperName("__values"), undefined, [expression]), location);
}
ts.createValuesHelper = createValuesHelper;
var readHelper = {
name: "typescript:read",
scoped: false,
text: "\n var __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n };\n "
};
function createReadHelper(context, iteratorRecord, count, location) {
context.requestEmitHelper(readHelper);
return ts.setTextRange(ts.createCall(getHelperName("__read"), undefined, count !== undefined
? [iteratorRecord, ts.createLiteral(count)]
: [iteratorRecord]), location);
}
ts.createReadHelper = createReadHelper;
var spreadHelper = {
name: "typescript:spread",
scoped: false,
text: "\n var __spread = (this && this.__spread) || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n };"
};
function createSpreadHelper(context, argumentList, location) {
context.requestEmitHelper(readHelper);
context.requestEmitHelper(spreadHelper);
return ts.setTextRange(ts.createCall(getHelperName("__spread"), undefined, argumentList), location);
}
ts.createSpreadHelper = createSpreadHelper;
function createForOfBindingStatement(node, boundValue) {
if (ts.isVariableDeclarationList(node)) {
var firstDeclaration = ts.firstOrUndefined(node.declarations);
var updatedDeclaration = ts.updateVariableDeclaration(firstDeclaration, firstDeclaration.name, undefined, boundValue);
return ts.setTextRange(ts.createVariableStatement(undefined, ts.updateVariableDeclarationList(node, [updatedDeclaration])), node);
}
else {
var updatedExpression = ts.setTextRange(ts.createAssignment(node, boundValue), node);
return ts.setTextRange(ts.createStatement(updatedExpression), node);
}
}
ts.createForOfBindingStatement = createForOfBindingStatement;
function insertLeadingStatement(dest, source) {
if (ts.isBlock(dest)) {
return ts.updateBlock(dest, ts.setTextRange(ts.createNodeArray([source].concat(dest.statements)), dest.statements));
}
else {
return ts.createBlock(ts.createNodeArray([dest, source]), true);
}
}
ts.insertLeadingStatement = insertLeadingStatement;
function restoreEnclosingLabel(node, outermostLabeledStatement, afterRestoreLabelCallback) {
if (!outermostLabeledStatement) {
return node;
}
var updated = ts.updateLabel(outermostLabeledStatement, outermostLabeledStatement.label, outermostLabeledStatement.statement.kind === 222
? restoreEnclosingLabel(node, outermostLabeledStatement.statement)
: node);
if (afterRestoreLabelCallback) {
afterRestoreLabelCallback(outermostLabeledStatement);
}
return updated;
}
ts.restoreEnclosingLabel = restoreEnclosingLabel;
function shouldBeCapturedInTempVariable(node, cacheIdentifiers) {
var target = skipParentheses(node);
switch (target.kind) {
case 71:
return cacheIdentifiers;
case 99:
case 8:
case 9:
return false;
case 177:
var elements = target.elements;
if (elements.length === 0) {
return false;
}
return true;
case 178:
return target.properties.length > 0;
default:
return true;
}
}
function createCallBinding(expression, recordTempVariable, languageVersion, cacheIdentifiers) {
var callee = skipOuterExpressions(expression, 7);
var thisArg;
var target;
if (ts.isSuperProperty(callee)) {
thisArg = ts.createThis();
target = callee;
}
else if (callee.kind === 97) {
thisArg = ts.createThis();
target = languageVersion < 2
? ts.setTextRange(ts.createIdentifier("_super"), callee)
: callee;
}
else if (ts.getEmitFlags(callee) & 4096) {
thisArg = ts.createVoidZero();
target = parenthesizeForAccess(callee);
}
else {
switch (callee.kind) {
case 179: {
if (shouldBeCapturedInTempVariable(callee.expression, cacheIdentifiers)) {
thisArg = ts.createTempVariable(recordTempVariable);
target = ts.createPropertyAccess(ts.setTextRange(ts.createAssignment(thisArg, callee.expression), callee.expression), callee.name);
ts.setTextRange(target, callee);
}
else {
thisArg = callee.expression;
target = callee;
}
break;
}
case 180: {
if (shouldBeCapturedInTempVariable(callee.expression, cacheIdentifiers)) {
thisArg = ts.createTempVariable(recordTempVariable);
target = ts.createElementAccess(ts.setTextRange(ts.createAssignment(thisArg, callee.expression), callee.expression), callee.argumentExpression);
ts.setTextRange(target, callee);
}
else {
thisArg = callee.expression;
target = callee;
}
break;
}
default: {
thisArg = ts.createVoidZero();
target = parenthesizeForAccess(expression);
break;
}
}
}
return { target: target, thisArg: thisArg };
}
ts.createCallBinding = createCallBinding;
function inlineExpressions(expressions) {
return expressions.length > 10
? ts.createCommaList(expressions)
: ts.reduceLeft(expressions, ts.createComma);
}
ts.inlineExpressions = inlineExpressions;
function createExpressionFromEntityName(node) {
if (ts.isQualifiedName(node)) {
var left = createExpressionFromEntityName(node.left);
var right = ts.getMutableClone(node.right);
return ts.setTextRange(ts.createPropertyAccess(left, right), node);
}
else {
return ts.getMutableClone(node);
}
}
ts.createExpressionFromEntityName = createExpressionFromEntityName;
function createExpressionForPropertyName(memberName) {
if (ts.isIdentifier(memberName)) {
return ts.createLiteral(memberName);
}
else if (ts.isComputedPropertyName(memberName)) {
return ts.getMutableClone(memberName.expression);
}
else {
return ts.getMutableClone(memberName);
}
}
ts.createExpressionForPropertyName = createExpressionForPropertyName;
function createExpressionForObjectLiteralElementLike(node, property, receiver) {
switch (property.kind) {
case 153:
case 154:
return createExpressionForAccessorDeclaration(node.properties, property, receiver, node.multiLine);
case 261:
return createExpressionForPropertyAssignment(property, receiver);
case 262:
return createExpressionForShorthandPropertyAssignment(property, receiver);
case 151:
return createExpressionForMethodDeclaration(property, receiver);
}
}
ts.createExpressionForObjectLiteralElementLike = createExpressionForObjectLiteralElementLike;
function createExpressionForAccessorDeclaration(properties, property, receiver, multiLine) {
var _a = ts.getAllAccessorDeclarations(properties, property), firstAccessor = _a.firstAccessor, getAccessor = _a.getAccessor, setAccessor = _a.setAccessor;
if (property === firstAccessor) {
var properties_9 = [];
if (getAccessor) {
var getterFunction = ts.createFunctionExpression(getAccessor.modifiers, undefined, undefined, undefined, getAccessor.parameters, undefined, getAccessor.body);
ts.setTextRange(getterFunction, getAccessor);
ts.setOriginalNode(getterFunction, getAccessor);
var getter = ts.createPropertyAssignment("get", getterFunction);
properties_9.push(getter);
}
if (setAccessor) {
var setterFunction = ts.createFunctionExpression(setAccessor.modifiers, undefined, undefined, undefined, setAccessor.parameters, undefined, setAccessor.body);
ts.setTextRange(setterFunction, setAccessor);
ts.setOriginalNode(setterFunction, setAccessor);
var setter = ts.createPropertyAssignment("set", setterFunction);
properties_9.push(setter);
}
properties_9.push(ts.createPropertyAssignment("enumerable", ts.createTrue()));
properties_9.push(ts.createPropertyAssignment("configurable", ts.createTrue()));
var expression = ts.setTextRange(ts.createCall(ts.createPropertyAccess(ts.createIdentifier("Object"), "defineProperty"), undefined, [
receiver,
createExpressionForPropertyName(property.name),
ts.createObjectLiteral(properties_9, multiLine)
]), firstAccessor);
return ts.aggregateTransformFlags(expression);
}
return undefined;
}
function createExpressionForPropertyAssignment(property, receiver) {
return ts.aggregateTransformFlags(ts.setOriginalNode(ts.setTextRange(ts.createAssignment(createMemberAccessForPropertyName(receiver, property.name, property.name), property.initializer), property), property));
}
function createExpressionForShorthandPropertyAssignment(property, receiver) {
return ts.aggregateTransformFlags(ts.setOriginalNode(ts.setTextRange(ts.createAssignment(createMemberAccessForPropertyName(receiver, property.name, property.name), ts.getSynthesizedClone(property.name)), property), property));
}
function createExpressionForMethodDeclaration(method, receiver) {
return ts.aggregateTransformFlags(ts.setOriginalNode(ts.setTextRange(ts.createAssignment(createMemberAccessForPropertyName(receiver, method.name, method.name), ts.setOriginalNode(ts.setTextRange(ts.createFunctionExpression(method.modifiers, method.asteriskToken, undefined, undefined, method.parameters, undefined, method.body), method), method)), method), method));
}
function getInternalName(node, allowComments, allowSourceMaps) {
return getName(node, allowComments, allowSourceMaps, 16384 | 32768);
}
ts.getInternalName = getInternalName;
function isInternalName(node) {
return (ts.getEmitFlags(node) & 32768) !== 0;
}
ts.isInternalName = isInternalName;
function getLocalName(node, allowComments, allowSourceMaps) {
return getName(node, allowComments, allowSourceMaps, 16384);
}
ts.getLocalName = getLocalName;
function isLocalName(node) {
return (ts.getEmitFlags(node) & 16384) !== 0;
}
ts.isLocalName = isLocalName;
function getExportName(node, allowComments, allowSourceMaps) {
return getName(node, allowComments, allowSourceMaps, 8192);
}
ts.getExportName = getExportName;
function isExportName(node) {
return (ts.getEmitFlags(node) & 8192) !== 0;
}
ts.isExportName = isExportName;
function getDeclarationName(node, allowComments, allowSourceMaps) {
return getName(node, allowComments, allowSourceMaps);
}
ts.getDeclarationName = getDeclarationName;
function getName(node, allowComments, allowSourceMaps, emitFlags) {
var nodeName = ts.getNameOfDeclaration(node);
if (nodeName && ts.isIdentifier(nodeName) && !ts.isGeneratedIdentifier(nodeName)) {
var name = ts.getMutableClone(nodeName);
emitFlags |= ts.getEmitFlags(nodeName);
if (!allowSourceMaps)
emitFlags |= 48;
if (!allowComments)
emitFlags |= 1536;
if (emitFlags)
ts.setEmitFlags(name, emitFlags);
return name;
}
return ts.getGeneratedNameForNode(node);
}
function getExternalModuleOrNamespaceExportName(ns, node, allowComments, allowSourceMaps) {
if (ns && ts.hasModifier(node, 1)) {
return getNamespaceMemberName(ns, getName(node), allowComments, allowSourceMaps);
}
return getExportName(node, allowComments, allowSourceMaps);
}
ts.getExternalModuleOrNamespaceExportName = getExternalModuleOrNamespaceExportName;
function getNamespaceMemberName(ns, name, allowComments, allowSourceMaps) {
var qualifiedName = ts.createPropertyAccess(ns, ts.nodeIsSynthesized(name) ? name : ts.getSynthesizedClone(name));
ts.setTextRange(qualifiedName, name);
var emitFlags;
if (!allowSourceMaps)
emitFlags |= 48;
if (!allowComments)
emitFlags |= 1536;
if (emitFlags)
ts.setEmitFlags(qualifiedName, emitFlags);
return qualifiedName;
}
ts.getNamespaceMemberName = getNamespaceMemberName;
function convertToFunctionBody(node, multiLine) {
return ts.isBlock(node) ? node : ts.setTextRange(ts.createBlock([ts.setTextRange(ts.createReturn(node), node)], multiLine), node);
}
ts.convertToFunctionBody = convertToFunctionBody;
function convertFunctionDeclarationToExpression(node) {
ts.Debug.assert(!!node.body);
var updated = ts.createFunctionExpression(node.modifiers, node.asteriskToken, node.name, node.typeParameters, node.parameters, node.type, node.body);
ts.setOriginalNode(updated, node);
ts.setTextRange(updated, node);
if (node.startsOnNewLine) {
updated.startsOnNewLine = true;
}
ts.aggregateTransformFlags(updated);
return updated;
}
ts.convertFunctionDeclarationToExpression = convertFunctionDeclarationToExpression;
function isUseStrictPrologue(node) {
return ts.isStringLiteral(node.expression) && node.expression.text === "use strict";
}
function addPrologue(target, source, ensureUseStrict, visitor) {
var offset = addStandardPrologue(target, source, ensureUseStrict);
return addCustomPrologue(target, source, offset, visitor);
}
ts.addPrologue = addPrologue;
function addStandardPrologue(target, source, ensureUseStrict) {
ts.Debug.assert(target.length === 0, "Prologue directives should be at the first statement in the target statements array");
var foundUseStrict = false;
var statementOffset = 0;
var numStatements = source.length;
while (statementOffset < numStatements) {
var statement = source[statementOffset];
if (ts.isPrologueDirective(statement)) {
if (isUseStrictPrologue(statement)) {
foundUseStrict = true;
}
target.push(statement);
}
else {
break;
}
statementOffset++;
}
if (ensureUseStrict && !foundUseStrict) {
target.push(startOnNewLine(ts.createStatement(ts.createLiteral("use strict"))));
}
return statementOffset;
}
ts.addStandardPrologue = addStandardPrologue;
function addCustomPrologue(target, source, statementOffset, visitor) {
var numStatements = source.length;
while (statementOffset < numStatements) {
var statement = source[statementOffset];
if (ts.getEmitFlags(statement) & 1048576) {
target.push(visitor ? ts.visitNode(statement, visitor, ts.isStatement) : statement);
}
else {
break;
}
statementOffset++;
}
return statementOffset;
}
ts.addCustomPrologue = addCustomPrologue;
function startsWithUseStrict(statements) {
var firstStatement = ts.firstOrUndefined(statements);
return firstStatement !== undefined
&& ts.isPrologueDirective(firstStatement)
&& isUseStrictPrologue(firstStatement);
}
ts.startsWithUseStrict = startsWithUseStrict;
function ensureUseStrict(statements) {
var foundUseStrict = false;
for (var _i = 0, statements_3 = statements; _i < statements_3.length; _i++) {
var statement = statements_3[_i];
if (ts.isPrologueDirective(statement)) {
if (isUseStrictPrologue(statement)) {
foundUseStrict = true;
break;
}
}
else {
break;
}
}
if (!foundUseStrict) {
return ts.setTextRange(ts.createNodeArray([
startOnNewLine(ts.createStatement(ts.createLiteral("use strict")))
].concat(statements)), statements);
}
return statements;
}
ts.ensureUseStrict = ensureUseStrict;
function parenthesizeBinaryOperand(binaryOperator, operand, isLeftSideOfBinary, leftOperand) {
var skipped = ts.skipPartiallyEmittedExpressions(operand);
if (skipped.kind === 185) {
return operand;
}
return binaryOperandNeedsParentheses(binaryOperator, operand, isLeftSideOfBinary, leftOperand)
? ts.createParen(operand)
: operand;
}
ts.parenthesizeBinaryOperand = parenthesizeBinaryOperand;
function binaryOperandNeedsParentheses(binaryOperator, operand, isLeftSideOfBinary, leftOperand) {
var binaryOperatorPrecedence = ts.getOperatorPrecedence(194, binaryOperator);
var binaryOperatorAssociativity = ts.getOperatorAssociativity(194, binaryOperator);
var emittedOperand = ts.skipPartiallyEmittedExpressions(operand);
var operandPrecedence = ts.getExpressionPrecedence(emittedOperand);
switch (ts.compareValues(operandPrecedence, binaryOperatorPrecedence)) {
case -1:
if (!isLeftSideOfBinary
&& binaryOperatorAssociativity === 1
&& operand.kind === 197) {
return false;
}
return true;
case 1:
return false;
case 0:
if (isLeftSideOfBinary) {
return binaryOperatorAssociativity === 1;
}
else {
if (ts.isBinaryExpression(emittedOperand)
&& emittedOperand.operatorToken.kind === binaryOperator) {
if (operatorHasAssociativeProperty(binaryOperator)) {
return false;
}
if (binaryOperator === 37) {
var leftKind = leftOperand ? getLiteralKindOfBinaryPlusOperand(leftOperand) : 0;
if (ts.isLiteralKind(leftKind) && leftKind === getLiteralKindOfBinaryPlusOperand(emittedOperand)) {
return false;
}
}
}
var operandAssociativity = ts.getExpressionAssociativity(emittedOperand);
return operandAssociativity === 0;
}
}
}
function operatorHasAssociativeProperty(binaryOperator) {
return binaryOperator === 39
|| binaryOperator === 49
|| binaryOperator === 48
|| binaryOperator === 50;
}
function getLiteralKindOfBinaryPlusOperand(node) {
node = ts.skipPartiallyEmittedExpressions(node);
if (ts.isLiteralKind(node.kind)) {
return node.kind;
}
if (node.kind === 194 && node.operatorToken.kind === 37) {
if (node.cachedLiteralKind !== undefined) {
return node.cachedLiteralKind;
}
var leftKind = getLiteralKindOfBinaryPlusOperand(node.left);
var literalKind = ts.isLiteralKind(leftKind)
&& leftKind === getLiteralKindOfBinaryPlusOperand(node.right)
? leftKind
: 0;
node.cachedLiteralKind = literalKind;
return literalKind;
}
return 0;
}
function parenthesizeForConditionalHead(condition) {
var conditionalPrecedence = ts.getOperatorPrecedence(195, 55);
var emittedCondition = ts.skipPartiallyEmittedExpressions(condition);
var conditionPrecedence = ts.getExpressionPrecedence(emittedCondition);
if (ts.compareValues(conditionPrecedence, conditionalPrecedence) === -1) {
return ts.createParen(condition);
}
return condition;
}
ts.parenthesizeForConditionalHead = parenthesizeForConditionalHead;
function parenthesizeSubexpressionOfConditionalExpression(e) {
return e.kind === 194 && e.operatorToken.kind === 26
? ts.createParen(e)
: e;
}
ts.parenthesizeSubexpressionOfConditionalExpression = parenthesizeSubexpressionOfConditionalExpression;
function parenthesizeForNew(expression) {
var leftmostExpr = getLeftmostExpression(expression, true);
switch (leftmostExpr.kind) {
case 181:
return ts.createParen(expression);
case 182:
return !leftmostExpr.arguments
? ts.createParen(expression)
: expression;
}
return parenthesizeForAccess(expression);
}
ts.parenthesizeForNew = parenthesizeForNew;
function parenthesizeForAccess(expression) {
var emittedExpression = ts.skipPartiallyEmittedExpressions(expression);
if (ts.isLeftHandSideExpression(emittedExpression)
&& (emittedExpression.kind !== 182 || emittedExpression.arguments)) {
return expression;
}
return ts.setTextRange(ts.createParen(expression), expression);
}
ts.parenthesizeForAccess = parenthesizeForAccess;
function parenthesizePostfixOperand(operand) {
return ts.isLeftHandSideExpression(operand)
? operand
: ts.setTextRange(ts.createParen(operand), operand);
}
ts.parenthesizePostfixOperand = parenthesizePostfixOperand;
function parenthesizePrefixOperand(operand) {
return ts.isUnaryExpression(operand)
? operand
: ts.setTextRange(ts.createParen(operand), operand);
}
ts.parenthesizePrefixOperand = parenthesizePrefixOperand;
function parenthesizeListElements(elements) {
var result;
for (var i = 0; i < elements.length; i++) {
var element = parenthesizeExpressionForList(elements[i]);
if (result !== undefined || element !== elements[i]) {
if (result === undefined) {
result = elements.slice(0, i);
}
result.push(element);
}
}
if (result !== undefined) {
return ts.setTextRange(ts.createNodeArray(result, elements.hasTrailingComma), elements);
}
return elements;
}
ts.parenthesizeListElements = parenthesizeListElements;
function parenthesizeExpressionForList(expression) {
var emittedExpression = ts.skipPartiallyEmittedExpressions(expression);
var expressionPrecedence = ts.getExpressionPrecedence(emittedExpression);
var commaPrecedence = ts.getOperatorPrecedence(194, 26);
return expressionPrecedence > commaPrecedence
? expression
: ts.setTextRange(ts.createParen(expression), expression);
}
ts.parenthesizeExpressionForList = parenthesizeExpressionForList;
function parenthesizeExpressionForExpressionStatement(expression) {
var emittedExpression = ts.skipPartiallyEmittedExpressions(expression);
if (ts.isCallExpression(emittedExpression)) {
var callee = emittedExpression.expression;
var kind = ts.skipPartiallyEmittedExpressions(callee).kind;
if (kind === 186 || kind === 187) {
var mutableCall = ts.getMutableClone(emittedExpression);
mutableCall.expression = ts.setTextRange(ts.createParen(callee), callee);
return recreateOuterExpressions(expression, mutableCall, 4);
}
}
var leftmostExpressionKind = getLeftmostExpression(emittedExpression, false).kind;
if (leftmostExpressionKind === 178 || leftmostExpressionKind === 186) {
return ts.setTextRange(ts.createParen(expression), expression);
}
return expression;
}
ts.parenthesizeExpressionForExpressionStatement = parenthesizeExpressionForExpressionStatement;
function parenthesizeElementTypeMember(member) {
switch (member.kind) {
case 166:
case 167:
case 160:
case 161:
return ts.createParenthesizedType(member);
}
return member;
}
ts.parenthesizeElementTypeMember = parenthesizeElementTypeMember;
function parenthesizeArrayTypeMember(member) {
switch (member.kind) {
case 162:
case 170:
return ts.createParenthesizedType(member);
}
return parenthesizeElementTypeMember(member);
}
ts.parenthesizeArrayTypeMember = parenthesizeArrayTypeMember;
function parenthesizeElementTypeMembers(members) {
return ts.createNodeArray(ts.sameMap(members, parenthesizeElementTypeMember));
}
ts.parenthesizeElementTypeMembers = parenthesizeElementTypeMembers;
function parenthesizeTypeParameters(typeParameters) {
if (ts.some(typeParameters)) {
var params = [];
for (var i = 0; i < typeParameters.length; ++i) {
var entry = typeParameters[i];
params.push(i === 0 && ts.isFunctionOrConstructorTypeNode(entry) && entry.typeParameters ?
ts.createParenthesizedType(entry) :
entry);
}
return ts.createNodeArray(params);
}
}
ts.parenthesizeTypeParameters = parenthesizeTypeParameters;
function getLeftmostExpression(node, stopAtCallExpressions) {
while (true) {
switch (node.kind) {
case 193:
node = node.operand;
continue;
case 194:
node = node.left;
continue;
case 195:
node = node.condition;
continue;
case 181:
if (stopAtCallExpressions) {
return node;
}
case 180:
case 179:
node = node.expression;
continue;
case 288:
node = node.expression;
continue;
}
return node;
}
}
function parenthesizeConciseBody(body) {
if (!ts.isBlock(body) && getLeftmostExpression(body, false).kind === 178) {
return ts.setTextRange(ts.createParen(body), body);
}
return body;
}
ts.parenthesizeConciseBody = parenthesizeConciseBody;
function isOuterExpression(node, kinds) {
if (kinds === void 0) { kinds = 7; }
switch (node.kind) {
case 185:
return (kinds & 1) !== 0;
case 184:
case 202:
case 203:
return (kinds & 2) !== 0;
case 288:
return (kinds & 4) !== 0;
}
return false;
}
ts.isOuterExpression = isOuterExpression;
function skipOuterExpressions(node, kinds) {
if (kinds === void 0) { kinds = 7; }
var previousNode;
do {
previousNode = node;
if (kinds & 1) {
node = skipParentheses(node);
}
if (kinds & 2) {
node = skipAssertions(node);
}
if (kinds & 4) {
node = ts.skipPartiallyEmittedExpressions(node);
}
} while (previousNode !== node);
return node;
}
ts.skipOuterExpressions = skipOuterExpressions;
function skipParentheses(node) {
while (node.kind === 185) {
node = node.expression;
}
return node;
}
ts.skipParentheses = skipParentheses;
function skipAssertions(node) {
while (ts.isAssertionExpression(node) || node.kind === 203) {
node = node.expression;
}
return node;
}
ts.skipAssertions = skipAssertions;
function updateOuterExpression(outerExpression, expression) {
switch (outerExpression.kind) {
case 185: return ts.updateParen(outerExpression, expression);
case 184: return ts.updateTypeAssertion(outerExpression, outerExpression.type, expression);
case 202: return ts.updateAsExpression(outerExpression, expression, outerExpression.type);
case 203: return ts.updateNonNullExpression(outerExpression, expression);
case 288: return ts.updatePartiallyEmittedExpression(outerExpression, expression);
}
}
function isIgnorableParen(node) {
return node.kind === 185
&& ts.nodeIsSynthesized(node)
&& ts.nodeIsSynthesized(ts.getSourceMapRange(node))
&& ts.nodeIsSynthesized(ts.getCommentRange(node))
&& !ts.some(ts.getSyntheticLeadingComments(node))
&& !ts.some(ts.getSyntheticTrailingComments(node));
}
function recreateOuterExpressions(outerExpression, innerExpression, kinds) {
if (kinds === void 0) { kinds = 7; }
if (outerExpression && isOuterExpression(outerExpression, kinds) && !isIgnorableParen(outerExpression)) {
return updateOuterExpression(outerExpression, recreateOuterExpressions(outerExpression.expression, innerExpression));
}
return innerExpression;
}
ts.recreateOuterExpressions = recreateOuterExpressions;
function startOnNewLine(node) {
node.startsOnNewLine = true;
return node;
}
ts.startOnNewLine = startOnNewLine;
function getExternalHelpersModuleName(node) {
var parseNode = ts.getOriginalNode(node, ts.isSourceFile);
var emitNode = parseNode && parseNode.emitNode;
return emitNode && emitNode.externalHelpersModuleName;
}
ts.getExternalHelpersModuleName = getExternalHelpersModuleName;
function getOrCreateExternalHelpersModuleNameIfNeeded(node, compilerOptions, hasExportStarsToExportValues) {
if (compilerOptions.importHelpers && ts.isEffectiveExternalModule(node, compilerOptions)) {
var externalHelpersModuleName = getExternalHelpersModuleName(node);
if (externalHelpersModuleName) {
return externalHelpersModuleName;
}
var moduleKind = ts.getEmitModuleKind(compilerOptions);
var create = hasExportStarsToExportValues
&& moduleKind !== ts.ModuleKind.System
&& moduleKind !== ts.ModuleKind.ES2015
&& moduleKind !== ts.ModuleKind.ESNext;
if (!create) {
var helpers = ts.getEmitHelpers(node);
if (helpers) {
for (var _i = 0, helpers_2 = helpers; _i < helpers_2.length; _i++) {
var helper = helpers_2[_i];
if (!helper.scoped) {
create = true;
break;
}
}
}
}
if (create) {
var parseNode = ts.getOriginalNode(node, ts.isSourceFile);
var emitNode = ts.getOrCreateEmitNode(parseNode);
return emitNode.externalHelpersModuleName || (emitNode.externalHelpersModuleName = ts.createUniqueName(ts.externalHelpersModuleNameText));
}
}
}
ts.getOrCreateExternalHelpersModuleNameIfNeeded = getOrCreateExternalHelpersModuleNameIfNeeded;
function getLocalNameForExternalImport(node, sourceFile) {
var namespaceDeclaration = ts.getNamespaceDeclarationNode(node);
if (namespaceDeclaration && !ts.isDefaultImport(node)) {
var name = namespaceDeclaration.name;
return ts.isGeneratedIdentifier(name) ? name : ts.createIdentifier(ts.getSourceTextOfNodeFromSourceFile(sourceFile, namespaceDeclaration.name));
}
if (node.kind === 238 && node.importClause) {
return ts.getGeneratedNameForNode(node);
}
if (node.kind === 244 && node.moduleSpecifier) {
return ts.getGeneratedNameForNode(node);
}
return undefined;
}
ts.getLocalNameForExternalImport = getLocalNameForExternalImport;
function getExternalModuleNameLiteral(importNode, sourceFile, host, resolver, compilerOptions) {
var moduleName = ts.getExternalModuleName(importNode);
if (moduleName.kind === 9) {
return tryGetModuleNameFromDeclaration(importNode, host, resolver, compilerOptions)
|| tryRenameExternalModule(moduleName, sourceFile)
|| ts.getSynthesizedClone(moduleName);
}
return undefined;
}
ts.getExternalModuleNameLiteral = getExternalModuleNameLiteral;
function tryRenameExternalModule(moduleName, sourceFile) {
var rename = sourceFile.renamedDependencies && sourceFile.renamedDependencies.get(moduleName.text);
return rename && ts.createLiteral(rename);
}
function tryGetModuleNameFromFile(file, host, options) {
if (!file) {
return undefined;
}
if (file.moduleName) {
return ts.createLiteral(file.moduleName);
}
if (!file.isDeclarationFile && (options.out || options.outFile)) {
return ts.createLiteral(ts.getExternalModuleNameFromPath(host, file.fileName));
}
return undefined;
}
ts.tryGetModuleNameFromFile = tryGetModuleNameFromFile;
function tryGetModuleNameFromDeclaration(declaration, host, resolver, compilerOptions) {
return tryGetModuleNameFromFile(resolver.getExternalModuleFileFromDeclaration(declaration), host, compilerOptions);
}
function getInitializerOfBindingOrAssignmentElement(bindingElement) {
if (ts.isDeclarationBindingElement(bindingElement)) {
return bindingElement.initializer;
}
if (ts.isPropertyAssignment(bindingElement)) {
return ts.isAssignmentExpression(bindingElement.initializer, true)
? bindingElement.initializer.right
: undefined;
}
if (ts.isShorthandPropertyAssignment(bindingElement)) {
return bindingElement.objectAssignmentInitializer;
}
if (ts.isAssignmentExpression(bindingElement, true)) {
return bindingElement.right;
}
if (ts.isSpreadElement(bindingElement)) {
return getInitializerOfBindingOrAssignmentElement(bindingElement.expression);
}
}
ts.getInitializerOfBindingOrAssignmentElement = getInitializerOfBindingOrAssignmentElement;
function getTargetOfBindingOrAssignmentElement(bindingElement) {
if (ts.isDeclarationBindingElement(bindingElement)) {
return bindingElement.name;
}
if (ts.isObjectLiteralElementLike(bindingElement)) {
switch (bindingElement.kind) {
case 261:
return getTargetOfBindingOrAssignmentElement(bindingElement.initializer);
case 262:
return bindingElement.name;
case 263:
return getTargetOfBindingOrAssignmentElement(bindingElement.expression);
}
return undefined;
}
if (ts.isAssignmentExpression(bindingElement, true)) {
return getTargetOfBindingOrAssignmentElement(bindingElement.left);
}
if (ts.isSpreadElement(bindingElement)) {
return getTargetOfBindingOrAssignmentElement(bindingElement.expression);
}
return bindingElement;
}
ts.getTargetOfBindingOrAssignmentElement = getTargetOfBindingOrAssignmentElement;
function getRestIndicatorOfBindingOrAssignmentElement(bindingElement) {
switch (bindingElement.kind) {
case 146:
case 176:
return bindingElement.dotDotDotToken;
case 198:
case 263:
return bindingElement;
}
return undefined;
}
ts.getRestIndicatorOfBindingOrAssignmentElement = getRestIndicatorOfBindingOrAssignmentElement;
function getPropertyNameOfBindingOrAssignmentElement(bindingElement) {
switch (bindingElement.kind) {
case 176:
if (bindingElement.propertyName) {
var propertyName = bindingElement.propertyName;
return ts.isComputedPropertyName(propertyName) && ts.isStringOrNumericLiteral(propertyName.expression)
? propertyName.expression
: propertyName;
}
break;
case 261:
if (bindingElement.name) {
var propertyName = bindingElement.name;
return ts.isComputedPropertyName(propertyName) && ts.isStringOrNumericLiteral(propertyName.expression)
? propertyName.expression
: propertyName;
}
break;
case 263:
return bindingElement.name;
}
var target = getTargetOfBindingOrAssignmentElement(bindingElement);
if (target && ts.isPropertyName(target)) {
return ts.isComputedPropertyName(target) && ts.isStringOrNumericLiteral(target.expression)
? target.expression
: target;
}
ts.Debug.fail("Invalid property name for binding element.");
}
ts.getPropertyNameOfBindingOrAssignmentElement = getPropertyNameOfBindingOrAssignmentElement;
function getElementsOfBindingOrAssignmentPattern(name) {
switch (name.kind) {
case 174:
case 175:
case 177:
return name.elements;
case 178:
return name.properties;
}
}
ts.getElementsOfBindingOrAssignmentPattern = getElementsOfBindingOrAssignmentPattern;
function convertToArrayAssignmentElement(element) {
if (ts.isBindingElement(element)) {
if (element.dotDotDotToken) {
ts.Debug.assertNode(element.name, ts.isIdentifier);
return ts.setOriginalNode(ts.setTextRange(ts.createSpread(element.name), element), element);
}
var expression = convertToAssignmentElementTarget(element.name);
return element.initializer
? ts.setOriginalNode(ts.setTextRange(ts.createAssignment(expression, element.initializer), element), element)
: expression;
}
ts.Debug.assertNode(element, ts.isExpression);
return element;
}
ts.convertToArrayAssignmentElement = convertToArrayAssignmentElement;
function convertToObjectAssignmentElement(element) {
if (ts.isBindingElement(element)) {
if (element.dotDotDotToken) {
ts.Debug.assertNode(element.name, ts.isIdentifier);
return ts.setOriginalNode(ts.setTextRange(ts.createSpreadAssignment(element.name), element), element);
}
if (element.propertyName) {
var expression = convertToAssignmentElementTarget(element.name);
return ts.setOriginalNode(ts.setTextRange(ts.createPropertyAssignment(element.propertyName, element.initializer ? ts.createAssignment(expression, element.initializer) : expression), element), element);
}
ts.Debug.assertNode(element.name, ts.isIdentifier);
return ts.setOriginalNode(ts.setTextRange(ts.createShorthandPropertyAssignment(element.name, element.initializer), element), element);
}
ts.Debug.assertNode(element, ts.isObjectLiteralElementLike);
return element;
}
ts.convertToObjectAssignmentElement = convertToObjectAssignmentElement;
function convertToAssignmentPattern(node) {
switch (node.kind) {
case 175:
case 177:
return convertToArrayAssignmentPattern(node);
case 174:
case 178:
return convertToObjectAssignmentPattern(node);
}
}
ts.convertToAssignmentPattern = convertToAssignmentPattern;
function convertToObjectAssignmentPattern(node) {
if (ts.isObjectBindingPattern(node)) {
return ts.setOriginalNode(ts.setTextRange(ts.createObjectLiteral(ts.map(node.elements, convertToObjectAssignmentElement)), node), node);
}
ts.Debug.assertNode(node, ts.isObjectLiteralExpression);
return node;
}
ts.convertToObjectAssignmentPattern = convertToObjectAssignmentPattern;
function convertToArrayAssignmentPattern(node) {
if (ts.isArrayBindingPattern(node)) {
return ts.setOriginalNode(ts.setTextRange(ts.createArrayLiteral(ts.map(node.elements, convertToArrayAssignmentElement)), node), node);
}
ts.Debug.assertNode(node, ts.isArrayLiteralExpression);
return node;
}
ts.convertToArrayAssignmentPattern = convertToArrayAssignmentPattern;
function convertToAssignmentElementTarget(node) {
if (ts.isBindingPattern(node)) {
return convertToAssignmentPattern(node);
}
ts.Debug.assertNode(node, ts.isExpression);
return node;
}
ts.convertToAssignmentElementTarget = convertToAssignmentElementTarget;
})(ts || (ts = {}));
var ts;
(function (ts) {
function visitNode(node, visitor, test, lift) {
if (node === undefined || visitor === undefined) {
return node;
}
ts.aggregateTransformFlags(node);
var visited = visitor(node);
if (visited === node) {
return node;
}
var visitedNode;
if (visited === undefined) {
return undefined;
}
else if (ts.isArray(visited)) {
visitedNode = (lift || extractSingleNode)(visited);
}
else {
visitedNode = visited;
}
ts.Debug.assertNode(visitedNode, test);
ts.aggregateTransformFlags(visitedNode);
return visitedNode;
}
ts.visitNode = visitNode;
function visitNodes(nodes, visitor, test, start, count) {
if (nodes === undefined || visitor === undefined) {
return nodes;
}
var updated;
var length = nodes.length;
if (start === undefined || start < 0) {
start = 0;
}
if (count === undefined || count > length - start) {
count = length - start;
}
if (start > 0 || count < length) {
updated = ts.createNodeArray([], nodes.hasTrailingComma && start + count === length);
}
for (var i = 0; i < count; i++) {
var node = nodes[i + start];
ts.aggregateTransformFlags(node);
var visited = node !== undefined ? visitor(node) : undefined;
if (updated !== undefined || visited === undefined || visited !== node) {
if (updated === undefined) {
updated = ts.createNodeArray(nodes.slice(0, i), nodes.hasTrailingComma);
ts.setTextRange(updated, nodes);
}
if (visited) {
if (ts.isArray(visited)) {
for (var _i = 0, visited_1 = visited; _i < visited_1.length; _i++) {
var visitedNode = visited_1[_i];
ts.Debug.assertNode(visitedNode, test);
ts.aggregateTransformFlags(visitedNode);
updated.push(visitedNode);
}
}
else {
ts.Debug.assertNode(visited, test);
ts.aggregateTransformFlags(visited);
updated.push(visited);
}
}
}
}
return updated || nodes;
}
ts.visitNodes = visitNodes;
function visitLexicalEnvironment(statements, visitor, context, start, ensureUseStrict) {
context.startLexicalEnvironment();
statements = visitNodes(statements, visitor, ts.isStatement, start);
if (ensureUseStrict && !ts.startsWithUseStrict(statements)) {
statements = ts.setTextRange(ts.createNodeArray([ts.createStatement(ts.createLiteral("use strict"))].concat(statements)), statements);
}
var declarations = context.endLexicalEnvironment();
return ts.setTextRange(ts.createNodeArray(ts.concatenate(statements, declarations)), statements);
}
ts.visitLexicalEnvironment = visitLexicalEnvironment;
function visitParameterList(nodes, visitor, context, nodesVisitor) {
if (nodesVisitor === void 0) { nodesVisitor = visitNodes; }
context.startLexicalEnvironment();
var updated = nodesVisitor(nodes, visitor, ts.isParameterDeclaration);
context.suspendLexicalEnvironment();
return updated;
}
ts.visitParameterList = visitParameterList;
function visitFunctionBody(node, visitor, context) {
context.resumeLexicalEnvironment();
var updated = visitNode(node, visitor, ts.isConciseBody);
var declarations = context.endLexicalEnvironment();
if (ts.some(declarations)) {
var block = ts.convertToFunctionBody(updated);
var statements = ts.mergeLexicalEnvironment(block.statements, declarations);
return ts.updateBlock(block, statements);
}
return updated;
}
ts.visitFunctionBody = visitFunctionBody;
function visitEachChild(node, visitor, context, nodesVisitor, tokenVisitor) {
if (nodesVisitor === void 0) { nodesVisitor = visitNodes; }
if (node === undefined) {
return undefined;
}
var kind = node.kind;
if ((kind > 0 && kind <= 142) || kind === 169) {
return node;
}
switch (kind) {
case 71:
return ts.updateIdentifier(node, nodesVisitor(node.typeArguments, visitor, ts.isTypeNode));
case 143:
return ts.updateQualifiedName(node, visitNode(node.left, visitor, ts.isEntityName), visitNode(node.right, visitor, ts.isIdentifier));
case 144:
return ts.updateComputedPropertyName(node, visitNode(node.expression, visitor, ts.isExpression));
case 145:
return ts.updateTypeParameterDeclaration(node, visitNode(node.name, visitor, ts.isIdentifier), visitNode(node.constraint, visitor, ts.isTypeNode), visitNode(node.default, visitor, ts.isTypeNode));
case 146:
return ts.updateParameter(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.dotDotDotToken, tokenVisitor, ts.isToken), visitNode(node.name, visitor, ts.isBindingName), visitNode(node.questionToken, tokenVisitor, ts.isToken), visitNode(node.type, visitor, ts.isTypeNode), visitNode(node.initializer, visitor, ts.isExpression));
case 147:
return ts.updateDecorator(node, visitNode(node.expression, visitor, ts.isExpression));
case 148:
return ts.updatePropertySignature(node, nodesVisitor(node.modifiers, visitor, ts.isToken), visitNode(node.name, visitor, ts.isPropertyName), visitNode(node.questionToken, tokenVisitor, ts.isToken), visitNode(node.type, visitor, ts.isTypeNode), visitNode(node.initializer, visitor, ts.isExpression));
case 149:
return ts.updateProperty(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.name, visitor, ts.isPropertyName), visitNode(node.questionToken, tokenVisitor, ts.isToken), visitNode(node.type, visitor, ts.isTypeNode), visitNode(node.initializer, visitor, ts.isExpression));
case 150:
return ts.updateMethodSignature(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), visitNode(node.type, visitor, ts.isTypeNode), visitNode(node.name, visitor, ts.isPropertyName), visitNode(node.questionToken, tokenVisitor, ts.isToken));
case 151:
return ts.updateMethod(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.asteriskToken, tokenVisitor, ts.isToken), visitNode(node.name, visitor, ts.isPropertyName), visitNode(node.questionToken, tokenVisitor, ts.isToken), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), visitNode(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context));
case 152:
return ts.updateConstructor(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitParameterList(node.parameters, visitor, context, nodesVisitor), visitFunctionBody(node.body, visitor, context));
case 153:
return ts.updateGetAccessor(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.name, visitor, ts.isPropertyName), visitParameterList(node.parameters, visitor, context, nodesVisitor), visitNode(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context));
case 154:
return ts.updateSetAccessor(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.name, visitor, ts.isPropertyName), visitParameterList(node.parameters, visitor, context, nodesVisitor), visitFunctionBody(node.body, visitor, context));
case 155:
return ts.updateCallSignature(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), visitNode(node.type, visitor, ts.isTypeNode));
case 156:
return ts.updateConstructSignature(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), visitNode(node.type, visitor, ts.isTypeNode));
case 157:
return ts.updateIndexSignature(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), visitNode(node.type, visitor, ts.isTypeNode));
case 158:
return ts.updateTypePredicateNode(node, visitNode(node.parameterName, visitor), visitNode(node.type, visitor, ts.isTypeNode));
case 159:
return ts.updateTypeReferenceNode(node, visitNode(node.typeName, visitor, ts.isEntityName), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode));
case 160:
return ts.updateFunctionTypeNode(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), visitNode(node.type, visitor, ts.isTypeNode));
case 161:
return ts.updateConstructorTypeNode(node, nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.parameters, visitor, ts.isParameterDeclaration), visitNode(node.type, visitor, ts.isTypeNode));
case 162:
return ts.updateTypeQueryNode(node, visitNode(node.exprName, visitor, ts.isEntityName));
case 163:
return ts.updateTypeLiteralNode(node, nodesVisitor(node.members, visitor, ts.isTypeElement));
case 164:
return ts.updateArrayTypeNode(node, visitNode(node.elementType, visitor, ts.isTypeNode));
case 165:
return ts.updateTypleTypeNode(node, nodesVisitor(node.elementTypes, visitor, ts.isTypeNode));
case 166:
return ts.updateUnionTypeNode(node, nodesVisitor(node.types, visitor, ts.isTypeNode));
case 167:
return ts.updateIntersectionTypeNode(node, nodesVisitor(node.types, visitor, ts.isTypeNode));
case 168:
return ts.updateParenthesizedType(node, visitNode(node.type, visitor, ts.isTypeNode));
case 170:
return ts.updateTypeOperatorNode(node, visitNode(node.type, visitor, ts.isTypeNode));
case 171:
return ts.updateIndexedAccessTypeNode(node, visitNode(node.objectType, visitor, ts.isTypeNode), visitNode(node.indexType, visitor, ts.isTypeNode));
case 172:
return ts.updateMappedTypeNode(node, visitNode(node.readonlyToken, tokenVisitor, ts.isToken), visitNode(node.typeParameter, visitor, ts.isTypeParameterDeclaration), visitNode(node.questionToken, tokenVisitor, ts.isToken), visitNode(node.type, visitor, ts.isTypeNode));
case 173:
return ts.updateLiteralTypeNode(node, visitNode(node.literal, visitor, ts.isExpression));
case 174:
return ts.updateObjectBindingPattern(node, nodesVisitor(node.elements, visitor, ts.isBindingElement));
case 175:
return ts.updateArrayBindingPattern(node, nodesVisitor(node.elements, visitor, ts.isArrayBindingElement));
case 176:
return ts.updateBindingElement(node, visitNode(node.dotDotDotToken, tokenVisitor, ts.isToken), visitNode(node.propertyName, visitor, ts.isPropertyName), visitNode(node.name, visitor, ts.isBindingName), visitNode(node.initializer, visitor, ts.isExpression));
case 177:
return ts.updateArrayLiteral(node, nodesVisitor(node.elements, visitor, ts.isExpression));
case 178:
return ts.updateObjectLiteral(node, nodesVisitor(node.properties, visitor, ts.isObjectLiteralElementLike));
case 179:
return ts.updatePropertyAccess(node, visitNode(node.expression, visitor, ts.isExpression), visitNode(node.name, visitor, ts.isIdentifier));
case 180:
return ts.updateElementAccess(node, visitNode(node.expression, visitor, ts.isExpression), visitNode(node.argumentExpression, visitor, ts.isExpression));
case 181:
return ts.updateCall(node, visitNode(node.expression, visitor, ts.isExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodesVisitor(node.arguments, visitor, ts.isExpression));
case 182:
return ts.updateNew(node, visitNode(node.expression, visitor, ts.isExpression), nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), nodesVisitor(node.arguments, visitor, ts.isExpression));
case 183:
return ts.updateTaggedTemplate(node, visitNode(node.tag, visitor, ts.isExpression), visitNode(node.template, visitor, ts.isTemplateLiteral));
case 184:
return ts.updateTypeAssertion(node, visitNode(node.type, visitor, ts.isTypeNode), visitNode(node.expression, visitor, ts.isExpression));
case 185:
return ts.updateParen(node, visitNode(node.expression, visitor, ts.isExpression));
case 186:
return ts.updateFunctionExpression(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.asteriskToken, tokenVisitor, ts.isToken), visitNode(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), visitNode(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context));
case 187:
return ts.updateArrowFunction(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), visitNode(node.type, visitor, ts.isTypeNode), visitNode(node.equalsGreaterThanToken, visitor, ts.isToken), visitFunctionBody(node.body, visitor, context));
case 188:
return ts.updateDelete(node, visitNode(node.expression, visitor, ts.isExpression));
case 189:
return ts.updateTypeOf(node, visitNode(node.expression, visitor, ts.isExpression));
case 190:
return ts.updateVoid(node, visitNode(node.expression, visitor, ts.isExpression));
case 191:
return ts.updateAwait(node, visitNode(node.expression, visitor, ts.isExpression));
case 192:
return ts.updatePrefix(node, visitNode(node.operand, visitor, ts.isExpression));
case 193:
return ts.updatePostfix(node, visitNode(node.operand, visitor, ts.isExpression));
case 194:
return ts.updateBinary(node, visitNode(node.left, visitor, ts.isExpression), visitNode(node.right, visitor, ts.isExpression), visitNode(node.operatorToken, visitor, ts.isToken));
case 195:
return ts.updateConditional(node, visitNode(node.condition, visitor, ts.isExpression), visitNode(node.questionToken, visitor, ts.isToken), visitNode(node.whenTrue, visitor, ts.isExpression), visitNode(node.colonToken, visitor, ts.isToken), visitNode(node.whenFalse, visitor, ts.isExpression));
case 196:
return ts.updateTemplateExpression(node, visitNode(node.head, visitor, ts.isTemplateHead), nodesVisitor(node.templateSpans, visitor, ts.isTemplateSpan));
case 197:
return ts.updateYield(node, visitNode(node.asteriskToken, tokenVisitor, ts.isToken), visitNode(node.expression, visitor, ts.isExpression));
case 198:
return ts.updateSpread(node, visitNode(node.expression, visitor, ts.isExpression));
case 199:
return ts.updateClassExpression(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.heritageClauses, visitor, ts.isHeritageClause), nodesVisitor(node.members, visitor, ts.isClassElement));
case 201:
return ts.updateExpressionWithTypeArguments(node, nodesVisitor(node.typeArguments, visitor, ts.isTypeNode), visitNode(node.expression, visitor, ts.isExpression));
case 202:
return ts.updateAsExpression(node, visitNode(node.expression, visitor, ts.isExpression), visitNode(node.type, visitor, ts.isTypeNode));
case 203:
return ts.updateNonNullExpression(node, visitNode(node.expression, visitor, ts.isExpression));
case 204:
return ts.updateMetaProperty(node, visitNode(node.name, visitor, ts.isIdentifier));
case 205:
return ts.updateTemplateSpan(node, visitNode(node.expression, visitor, ts.isExpression), visitNode(node.literal, visitor, ts.isTemplateMiddleOrTemplateTail));
case 207:
return ts.updateBlock(node, nodesVisitor(node.statements, visitor, ts.isStatement));
case 208:
return ts.updateVariableStatement(node, nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.declarationList, visitor, ts.isVariableDeclarationList));
case 210:
return ts.updateStatement(node, visitNode(node.expression, visitor, ts.isExpression));
case 211:
return ts.updateIf(node, visitNode(node.expression, visitor, ts.isExpression), visitNode(node.thenStatement, visitor, ts.isStatement, ts.liftToBlock), visitNode(node.elseStatement, visitor, ts.isStatement, ts.liftToBlock));
case 212:
return ts.updateDo(node, visitNode(node.statement, visitor, ts.isStatement, ts.liftToBlock), visitNode(node.expression, visitor, ts.isExpression));
case 213:
return ts.updateWhile(node, visitNode(node.expression, visitor, ts.isExpression), visitNode(node.statement, visitor, ts.isStatement, ts.liftToBlock));
case 214:
return ts.updateFor(node, visitNode(node.initializer, visitor, ts.isForInitializer), visitNode(node.condition, visitor, ts.isExpression), visitNode(node.incrementor, visitor, ts.isExpression), visitNode(node.statement, visitor, ts.isStatement, ts.liftToBlock));
case 215:
return ts.updateForIn(node, visitNode(node.initializer, visitor, ts.isForInitializer), visitNode(node.expression, visitor, ts.isExpression), visitNode(node.statement, visitor, ts.isStatement, ts.liftToBlock));
case 216:
return ts.updateForOf(node, node.awaitModifier, visitNode(node.initializer, visitor, ts.isForInitializer), visitNode(node.expression, visitor, ts.isExpression), visitNode(node.statement, visitor, ts.isStatement, ts.liftToBlock));
case 217:
return ts.updateContinue(node, visitNode(node.label, visitor, ts.isIdentifier));
case 218:
return ts.updateBreak(node, visitNode(node.label, visitor, ts.isIdentifier));
case 219:
return ts.updateReturn(node, visitNode(node.expression, visitor, ts.isExpression));
case 220:
return ts.updateWith(node, visitNode(node.expression, visitor, ts.isExpression), visitNode(node.statement, visitor, ts.isStatement, ts.liftToBlock));
case 221:
return ts.updateSwitch(node, visitNode(node.expression, visitor, ts.isExpression), visitNode(node.caseBlock, visitor, ts.isCaseBlock));
case 222:
return ts.updateLabel(node, visitNode(node.label, visitor, ts.isIdentifier), visitNode(node.statement, visitor, ts.isStatement, ts.liftToBlock));
case 223:
return ts.updateThrow(node, visitNode(node.expression, visitor, ts.isExpression));
case 224:
return ts.updateTry(node, visitNode(node.tryBlock, visitor, ts.isBlock), visitNode(node.catchClause, visitor, ts.isCatchClause), visitNode(node.finallyBlock, visitor, ts.isBlock));
case 226:
return ts.updateVariableDeclaration(node, visitNode(node.name, visitor, ts.isBindingName), visitNode(node.type, visitor, ts.isTypeNode), visitNode(node.initializer, visitor, ts.isExpression));
case 227:
return ts.updateVariableDeclarationList(node, nodesVisitor(node.declarations, visitor, ts.isVariableDeclaration));
case 228:
return ts.updateFunctionDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.asteriskToken, tokenVisitor, ts.isToken), visitNode(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitParameterList(node.parameters, visitor, context, nodesVisitor), visitNode(node.type, visitor, ts.isTypeNode), visitFunctionBody(node.body, visitor, context));
case 229:
return ts.updateClassDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.heritageClauses, visitor, ts.isHeritageClause), nodesVisitor(node.members, visitor, ts.isClassElement));
case 230:
return ts.updateInterfaceDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), nodesVisitor(node.heritageClauses, visitor, ts.isHeritageClause), nodesVisitor(node.members, visitor, ts.isTypeElement));
case 231:
return ts.updateTypeAliasDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.name, visitor, ts.isIdentifier), nodesVisitor(node.typeParameters, visitor, ts.isTypeParameterDeclaration), visitNode(node.type, visitor, ts.isTypeNode));
case 232:
return ts.updateEnumDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.name, visitor, ts.isIdentifier), nodesVisitor(node.members, visitor, ts.isEnumMember));
case 233:
return ts.updateModuleDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.name, visitor, ts.isIdentifier), visitNode(node.body, visitor, ts.isModuleBody));
case 234:
return ts.updateModuleBlock(node, nodesVisitor(node.statements, visitor, ts.isStatement));
case 235:
return ts.updateCaseBlock(node, nodesVisitor(node.clauses, visitor, ts.isCaseOrDefaultClause));
case 236:
return ts.updateNamespaceExportDeclaration(node, visitNode(node.name, visitor, ts.isIdentifier));
case 237:
return ts.updateImportEqualsDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.name, visitor, ts.isIdentifier), visitNode(node.moduleReference, visitor, ts.isModuleReference));
case 238:
return ts.updateImportDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.importClause, visitor, ts.isImportClause), visitNode(node.moduleSpecifier, visitor, ts.isExpression));
case 239:
return ts.updateImportClause(node, visitNode(node.name, visitor, ts.isIdentifier), visitNode(node.namedBindings, visitor, ts.isNamedImportBindings));
case 240:
return ts.updateNamespaceImport(node, visitNode(node.name, visitor, ts.isIdentifier));
case 241:
return ts.updateNamedImports(node, nodesVisitor(node.elements, visitor, ts.isImportSpecifier));
case 242:
return ts.updateImportSpecifier(node, visitNode(node.propertyName, visitor, ts.isIdentifier), visitNode(node.name, visitor, ts.isIdentifier));
case 243:
return ts.updateExportAssignment(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.expression, visitor, ts.isExpression));
case 244:
return ts.updateExportDeclaration(node, nodesVisitor(node.decorators, visitor, ts.isDecorator), nodesVisitor(node.modifiers, visitor, ts.isModifier), visitNode(node.exportClause, visitor, ts.isNamedExports), visitNode(node.moduleSpecifier, visitor, ts.isExpression));
case 245:
return ts.updateNamedExports(node, nodesVisitor(node.elements, visitor, ts.isExportSpecifier));
case 246:
return ts.updateExportSpecifier(node, visitNode(node.propertyName, visitor, ts.isIdentifier), visitNode(node.name, visitor, ts.isIdentifier));
case 248:
return ts.updateExternalModuleReference(node, visitNode(node.expression, visitor, ts.isExpression));
case 249:
return ts.updateJsxElement(node, visitNode(node.openingElement, visitor, ts.isJsxOpeningElement), nodesVisitor(node.children, visitor, ts.isJsxChild), visitNode(node.closingElement, visitor, ts.isJsxClosingElement));
case 250:
return ts.updateJsxSelfClosingElement(node, visitNode(node.tagName, visitor, ts.isJsxTagNameExpression), visitNode(node.attributes, visitor, ts.isJsxAttributes));
case 251:
return ts.updateJsxOpeningElement(node, visitNode(node.tagName, visitor, ts.isJsxTagNameExpression), visitNode(node.attributes, visitor, ts.isJsxAttributes));
case 252:
return ts.updateJsxClosingElement(node, visitNode(node.tagName, visitor, ts.isJsxTagNameExpression));
case 253:
return ts.updateJsxAttribute(node, visitNode(node.name, visitor, ts.isIdentifier), visitNode(node.initializer, visitor, ts.isStringLiteralOrJsxExpression));
case 254:
return ts.updateJsxAttributes(node, nodesVisitor(node.properties, visitor, ts.isJsxAttributeLike));
case 255:
return ts.updateJsxSpreadAttribute(node, visitNode(node.expression, visitor, ts.isExpression));
case 256:
return ts.updateJsxExpression(node, visitNode(node.expression, visitor, ts.isExpression));
case 257:
return ts.updateCaseClause(node, visitNode(node.expression, visitor, ts.isExpression), nodesVisitor(node.statements, visitor, ts.isStatement));
case 258:
return ts.updateDefaultClause(node, nodesVisitor(node.statements, visitor, ts.isStatement));
case 259:
return ts.updateHeritageClause(node, nodesVisitor(node.types, visitor, ts.isExpressionWithTypeArguments));
case 260:
return ts.updateCatchClause(node, visitNode(node.variableDeclaration, visitor, ts.isVariableDeclaration), visitNode(node.block, visitor, ts.isBlock));
case 261:
return ts.updatePropertyAssignment(node, visitNode(node.name, visitor, ts.isPropertyName), visitNode(node.initializer, visitor, ts.isExpression));
case 262:
return ts.updateShorthandPropertyAssignment(node, visitNode(node.name, visitor, ts.isIdentifier), visitNode(node.objectAssignmentInitializer, visitor, ts.isExpression));
case 263:
return ts.updateSpreadAssignment(node, visitNode(node.expression, visitor, ts.isExpression));
case 264:
return ts.updateEnumMember(node, visitNode(node.name, visitor, ts.isPropertyName), visitNode(node.initializer, visitor, ts.isExpression));
case 265:
return ts.updateSourceFileNode(node, visitLexicalEnvironment(node.statements, visitor, context));
case 288:
return ts.updatePartiallyEmittedExpression(node, visitNode(node.expression, visitor, ts.isExpression));
case 289:
return ts.updateCommaList(node, nodesVisitor(node.elements, visitor, ts.isExpression));
default:
return node;
}
}
ts.visitEachChild = visitEachChild;
function extractSingleNode(nodes) {
ts.Debug.assert(nodes.length <= 1, "Too many nodes written to output.");
return ts.singleOrUndefined(nodes);
}
})(ts || (ts = {}));
(function (ts) {
function reduceNode(node, f, initial) {
return node ? f(initial, node) : initial;
}
function reduceNodeArray(nodes, f, initial) {
return nodes ? f(initial, nodes) : initial;
}
function reduceEachChild(node, initial, cbNode, cbNodeArray) {
if (node === undefined) {
return initial;
}
var reduceNodes = cbNodeArray ? reduceNodeArray : ts.reduceLeft;
var cbNodes = cbNodeArray || cbNode;
var kind = node.kind;
if ((kind > 0 && kind <= 142)) {
return initial;
}
if ((kind >= 158 && kind <= 173)) {
return initial;
}
var result = initial;
switch (node.kind) {
case 206:
case 209:
case 200:
case 225:
case 287:
break;
case 143:
result = reduceNode(node.left, cbNode, result);
result = reduceNode(node.right, cbNode, result);
break;
case 144:
result = reduceNode(node.expression, cbNode, result);
break;
case 146:
result = reduceNodes(node.decorators, cbNodes, result);
result = reduceNodes(node.modifiers, cbNodes, result);
result = reduceNode(node.name, cbNode, result);
result = reduceNode(node.type, cbNode, result);
result = reduceNode(node.initializer, cbNode, result);
break;
case 147:
result = reduceNode(node.expression, cbNode, result);
break;
case 148:
result = reduceNodes(node.modifiers, cbNodes, result);
result = reduceNode(node.name, cbNode, result);
result = reduceNode(node.questionToken, cbNode, result);
result = reduceNode(node.type, cbNode, result);
result = reduceNode(node.initializer, cbNode, result);
break;
case 149:
result = reduceNodes(node.decorators, cbNodes, result);
result = reduceNodes(node.modifiers, cbNodes, result);
result = reduceNode(node.name, cbNode, result);
result = reduceNode(node.type, cbNode, result);
result = reduceNode(node.initializer, cbNode, result);
break;
case 151:
result = reduceNodes(node.decorators, cbNodes, result);
result = reduceNodes(node.modifiers, cbNodes, result);
result = reduceNode(node.name, cbNode, result);
result = reduceNodes(node.typeParameters, cbNodes, result);
result = reduceNodes(node.parameters, cbNodes, result);
result = reduceNode(node.type, cbNode, result);
result = reduceNode(node.body, cbNode, result);
break;
case 152:
result = reduceNodes(node.modifiers, cbNodes, result);
result = reduceNodes(node.parameters, cbNodes, result);
result = reduceNode(node.body, cbNode, result);
break;
case 153:
result = reduceNodes(node.decorators, cbNodes, result);
result = reduceNodes(node.modifiers, cbNodes, result);
result = reduceNode(node.name, cbNode, result);
result = reduceNodes(node.parameters, cbNodes, result);
result = reduceNode(node.type, cbNode, result);
result = reduceNode(node.body, cbNode, result);
break;
case 154:
result = reduceNodes(node.decorators, cbNodes, result);
result = reduceNodes(node.modifiers, cbNodes, result);
result = reduceNode(node.name, cbNode, result);
result = reduceNodes(node.parameters, cbNodes, result);
result = reduceNode(node.body, cbNode, result);
break;
case 174:
case 175:
result = reduceNodes(node.elements, cbNodes, result);
break;
case 176:
result = reduceNode(node.propertyName, cbNode, result);
result = reduceNode(node.name, cbNode, result);
result = reduceNode(node.initializer, cbNode, result);
break;
case 177:
result = reduceNodes(node.elements, cbNodes, result);
break;
case 178:
result = reduceNodes(node.properties, cbNodes, result);
break;
case 179:
result = reduceNode(node.expression, cbNode, result);
result = reduceNode(node.name, cbNode, result);
break;
case 180:
result = reduceNode(node.expression, cbNode, result);
result = reduceNode(node.argumentExpression, cbNode, result);
break;
case 181:
result = reduceNode(node.expression, cbNode, result);
result = reduceNodes(node.typeArguments, cbNodes, result);
result = reduceNodes(node.arguments, cbNodes, result);
break;
case 182:
result = reduceNode(node.expression, cbNode, result);
result = reduceNodes(node.typeArguments, cbNodes, result);
result = reduceNodes(node.arguments, cbNodes, result);
break;
case 183:
result = reduceNode(node.tag, cbNode, result);
result = reduceNode(node.template, cbNode, result);
break;
case 184:
result = reduceNode(node.type, cbNode, result);
result = reduceNode(node.expression, cbNode, result);
break;
case 186:
result = reduceNodes(node.modifiers, cbNodes, result);
result = reduceNode(node.name, cbNode, result);
result = reduceNodes(node.typeParameters, cbNodes, result);
result = reduceNodes(node.parameters, cbNodes, result);
result = reduceNode(node.type, cbNode, result);
result = reduceNode(node.body, cbNode, result);
break;
case 187:
result = reduceNodes(node.modifiers, cbNodes, result);
result = reduceNodes(node.typeParameters, cbNodes, result);
result = reduceNodes(node.parameters, cbNodes, result);
result = reduceNode(node.type, cbNode, result);
result = reduceNode(node.body, cbNode, result);
break;
case 185:
case 188:
case 189:
case 190:
case 191:
case 197:
case 198:
case 203:
result = reduceNode(node.expression, cbNode, result);
break;
case 192:
case 193:
result = reduceNode(node.operand, cbNode, result);
break;
case 194:
result = reduceNode(node.left, cbNode, result);
result = reduceNode(node.right, cbNode, result);
break;
case 195:
result = reduceNode(node.condition, cbNode, result);
result = reduceNode(node.whenTrue, cbNode, result);
result = reduceNode(node.whenFalse, cbNode, result);
break;
case 196:
result = reduceNode(node.head, cbNode, result);
result = reduceNodes(node.templateSpans, cbNodes, result);
break;
case 199:
result = reduceNodes(node.modifiers, cbNodes, result);
result = reduceNode(node.name, cbNode, result);
result = reduceNodes(node.typeParameters, cbNodes, result);
result = reduceNodes(node.heritageClauses, cbNodes, result);
result = reduceNodes(node.members, cbNodes, result);
break;
case 201:
result = reduceNode(node.expression, cbNode, result);
result = reduceNodes(node.typeArguments, cbNodes, result);
break;
case 202:
result = reduceNode(node.expression, cbNode, result);
result = reduceNode(node.type, cbNode, result);
break;
case 205:
result = reduceNode(node.expression, cbNode, result);
result = reduceNode(node.literal, cbNode, result);
break;
case 207:
result = reduceNodes(node.statements, cbNodes, result);
break;
case 208:
result = reduceNodes(node.modifiers, cbNodes, result);
result = reduceNode(node.declarationList, cbNode, result);
break;
case 210:
result = reduceNode(node.expression, cbNode, result);
break;
case 211:
result = reduceNode(node.expression, cbNode, result);
result = reduceNode(node.thenStatement, cbNode, result);
result = reduceNode(node.elseStatement, cbNode, result);
break;
case 212:
result = reduceNode(node.statement, cbNode, result);
result = reduceNode(node.expression, cbNode, result);
break;
case 213:
case 220:
result = reduceNode(node.expression, cbNode, result);
result = reduceNode(node.statement, cbNode, result);
break;
case 214:
result = reduceNode(node.initializer, cbNode, result);
result = reduceNode(node.condition, cbNode, result);
result = reduceNode(node.incrementor, cbNode, result);
result = reduceNode(node.statement, cbNode, result);
break;
case 215:
case 216:
result = reduceNode(node.initializer, cbNode, result);
result = reduceNode(node.expression, cbNode, result);
result = reduceNode(node.statement, cbNode, result);
break;
case 219:
case 223:
result = reduceNode(node.expression, cbNode, result);
break;
case 221:
result = reduceNode(node.expression, cbNode, result);
result = reduceNode(node.caseBlock, cbNode, result);
break;
case 222:
result = reduceNode(node.label, cbNode, result);
result = reduceNode(node.statement, cbNode, result);
break;
case 224:
result = reduceNode(node.tryBlock, cbNode, result);
result = reduceNode(node.catchClause, cbNode, result);
result = reduceNode(node.finallyBlock, cbNode, result);
break;
case 226:
result = reduceNode(node.name, cbNode, result);
result = reduceNode(node.type, cbNode, result);
result = reduceNode(node.initializer, cbNode, result);
break;
case 227:
result = reduceNodes(node.declarations, cbNodes, result);
break;
case 228:
result = reduceNodes(node.decorators, cbNodes, result);
result = reduceNodes(node.modifiers, cbNodes, result);
result = reduceNode(node.name, cbNode, result);
result = reduceNodes(node.typeParameters, cbNodes, result);
result = reduceNodes(node.parameters, cbNodes, result);
result = reduceNode(node.type, cbNode, result);
result = reduceNode(node.body, cbNode, result);
break;
case 229:
result = reduceNodes(node.decorators, cbNodes, result);
result = reduceNodes(node.modifiers, cbNodes, result);
result = reduceNode(node.name, cbNode, result);
result = reduceNodes(node.typeParameters, cbNodes, result);
result = reduceNodes(node.heritageClauses, cbNodes, result);
result = reduceNodes(node.members, cbNodes, result);
break;
case 232:
result = reduceNodes(node.decorators, cbNodes, result);
result = reduceNodes(node.modifiers, cbNodes, result);
result = reduceNode(node.name, cbNode, result);
result = reduceNodes(node.members, cbNodes, result);
break;
case 233:
result = reduceNodes(node.decorators, cbNodes, result);
result = reduceNodes(node.modifiers, cbNodes, result);
result = reduceNode(node.name, cbNode, result);
result = reduceNode(node.body, cbNode, result);
break;
case 234:
result = reduceNodes(node.statements, cbNodes, result);
break;
case 235:
result = reduceNodes(node.clauses, cbNodes, result);
break;
case 237:
result = reduceNodes(node.decorators, cbNodes, result);
result = reduceNodes(node.modifiers, cbNodes, result);
result = reduceNode(node.name, cbNode, result);
result = reduceNode(node.moduleReference, cbNode, result);
break;
case 238:
result = reduceNodes(node.decorators, cbNodes, result);
result = reduceNodes(node.modifiers, cbNodes, result);
result = reduceNode(node.importClause, cbNode, result);
result = reduceNode(node.moduleSpecifier, cbNode, result);
break;
case 239:
result = reduceNode(node.name, cbNode, result);
result = reduceNode(node.namedBindings, cbNode, result);
break;
case 240:
result = reduceNode(node.name, cbNode, result);
break;
case 241:
case 245:
result = reduceNodes(node.elements, cbNodes, result);
break;
case 242:
case 246:
result = reduceNode(node.propertyName, cbNode, result);
result = reduceNode(node.name, cbNode, result);
break;
case 243:
result = ts.reduceLeft(node.decorators, cbNode, result);
result = ts.reduceLeft(node.modifiers, cbNode, result);
result = reduceNode(node.expression, cbNode, result);
break;
case 244:
result = ts.reduceLeft(node.decorators, cbNode, result);
result = ts.reduceLeft(node.modifiers, cbNode, result);
result = reduceNode(node.exportClause, cbNode, result);
result = reduceNode(node.moduleSpecifier, cbNode, result);
break;
case 248:
result = reduceNode(node.expression, cbNode, result);
break;
case 249:
result = reduceNode(node.openingElement, cbNode, result);
result = ts.reduceLeft(node.children, cbNode, result);
result = reduceNode(node.closingElement, cbNode, result);
break;
case 250:
case 251:
result = reduceNode(node.tagName, cbNode, result);
result = reduceNode(node.attributes, cbNode, result);
break;
case 254:
result = reduceNodes(node.properties, cbNodes, result);
break;
case 252:
result = reduceNode(node.tagName, cbNode, result);
break;
case 253:
result = reduceNode(node.name, cbNode, result);
result = reduceNode(node.initializer, cbNode, result);
break;
case 255:
result = reduceNode(node.expression, cbNode, result);
break;
case 256:
result = reduceNode(node.expression, cbNode, result);
break;
case 257:
result = reduceNode(node.expression, cbNode, result);
case 258:
result = reduceNodes(node.statements, cbNodes, result);
break;
case 259:
result = reduceNodes(node.types, cbNodes, result);
break;
case 260:
result = reduceNode(node.variableDeclaration, cbNode, result);
result = reduceNode(node.block, cbNode, result);
break;
case 261:
result = reduceNode(node.name, cbNode, result);
result = reduceNode(node.initializer, cbNode, result);
break;
case 262:
result = reduceNode(node.name, cbNode, result);
result = reduceNode(node.objectAssignmentInitializer, cbNode, result);
break;
case 263:
result = reduceNode(node.expression, cbNode, result);
break;
case 264:
result = reduceNode(node.name, cbNode, result);
result = reduceNode(node.initializer, cbNode, result);
break;
case 265:
result = reduceNodes(node.statements, cbNodes, result);
break;
case 288:
result = reduceNode(node.expression, cbNode, result);
break;
case 289:
result = reduceNodes(node.elements, cbNodes, result);
break;
default:
break;
}
return result;
}
ts.reduceEachChild = reduceEachChild;
function mergeLexicalEnvironment(statements, declarations) {
if (!ts.some(declarations)) {
return statements;
}
return ts.isNodeArray(statements)
? ts.setTextRange(ts.createNodeArray(ts.concatenate(statements, declarations)), statements)
: ts.addRange(statements, declarations);
}
ts.mergeLexicalEnvironment = mergeLexicalEnvironment;
function liftToBlock(nodes) {
Debug.assert(ts.every(nodes, ts.isStatement), "Cannot lift nodes to a Block.");
return ts.singleOrUndefined(nodes) || ts.createBlock(nodes);
}
ts.liftToBlock = liftToBlock;
function aggregateTransformFlags(node) {
aggregateTransformFlagsForNode(node);
return node;
}
ts.aggregateTransformFlags = aggregateTransformFlags;
function aggregateTransformFlagsForNode(node) {
if (node === undefined) {
return 0;
}
if (node.transformFlags & 536870912) {
return node.transformFlags & ~ts.getTransformFlagsSubtreeExclusions(node.kind);
}
var subtreeFlags = aggregateTransformFlagsForSubtree(node);
return ts.computeTransformFlagsForNode(node, subtreeFlags);
}
function aggregateTransformFlagsForNodeArray(nodes) {
if (nodes === undefined) {
return 0;
}
var subtreeFlags = 0;
var nodeArrayFlags = 0;
for (var _i = 0, nodes_3 = nodes; _i < nodes_3.length; _i++) {
var node = nodes_3[_i];
subtreeFlags |= aggregateTransformFlagsForNode(node);
nodeArrayFlags |= node.transformFlags & ~536870912;
}
nodes.transformFlags = nodeArrayFlags | 536870912;
return subtreeFlags;
}
function aggregateTransformFlagsForSubtree(node) {
if (ts.hasModifier(node, 2) || (ts.isTypeNode(node) && node.kind !== 201)) {
return 0;
}
return reduceEachChild(node, 0, aggregateTransformFlagsForChildNode, aggregateTransformFlagsForChildNodes);
}
function aggregateTransformFlagsForChildNode(transformFlags, node) {
return transformFlags | aggregateTransformFlagsForNode(node);
}
function aggregateTransformFlagsForChildNodes(transformFlags, nodes) {
return transformFlags | aggregateTransformFlagsForNodeArray(nodes);
}
var Debug;
(function (Debug) {
var isDebugInfoEnabled = false;
Debug.failBadSyntaxKind = Debug.shouldAssert(1)
? function (node, message) { return Debug.fail((message || "Unexpected node.") + "\r\nNode " + ts.formatSyntaxKind(node.kind) + " was unexpected.", Debug.failBadSyntaxKind); }
: ts.noop;
Debug.assertEachNode = Debug.shouldAssert(1)
? function (nodes, test, message) { return Debug.assert(test === undefined || ts.every(nodes, test), message || "Unexpected node.", function () { return "Node array did not pass test '" + Debug.getFunctionName(test) + "'."; }, Debug.assertEachNode); }
: ts.noop;
Debug.assertNode = Debug.shouldAssert(1)
? function (node, test, message) { return Debug.assert(test === undefined || test(node), message || "Unexpected node.", function () { return "Node " + ts.formatSyntaxKind(node.kind) + " did not pass test '" + Debug.getFunctionName(test) + "'."; }, Debug.assertNode); }
: ts.noop;
Debug.assertOptionalNode = Debug.shouldAssert(1)
? function (node, test, message) { return Debug.assert(test === undefined || node === undefined || test(node), message || "Unexpected node.", function () { return "Node " + ts.formatSyntaxKind(node.kind) + " did not pass test '" + Debug.getFunctionName(test) + "'."; }, Debug.assertOptionalNode); }
: ts.noop;
Debug.assertOptionalToken = Debug.shouldAssert(1)
? function (node, kind, message) { return Debug.assert(kind === undefined || node === undefined || node.kind === kind, message || "Unexpected node.", function () { return "Node " + ts.formatSyntaxKind(node.kind) + " was not a '" + ts.formatSyntaxKind(kind) + "' token."; }, Debug.assertOptionalToken); }
: ts.noop;
Debug.assertMissingNode = Debug.shouldAssert(1)
? function (node, message) { return Debug.assert(node === undefined, message || "Unexpected node.", function () { return "Node " + ts.formatSyntaxKind(node.kind) + " was unexpected'."; }, Debug.assertMissingNode); }
: ts.noop;
function enableDebugInfo() {
if (isDebugInfoEnabled)
return;
Object.defineProperties(ts.objectAllocator.getSymbolConstructor().prototype, {
"__debugFlags": { get: function () { return ts.formatSymbolFlags(this.flags); } }
});
Object.defineProperties(ts.objectAllocator.getTypeConstructor().prototype, {
"__debugFlags": { get: function () { return ts.formatTypeFlags(this.flags); } },
"__debugObjectFlags": { get: function () { return this.flags & 32768 ? ts.formatObjectFlags(this.objectFlags) : ""; } },
"__debugTypeToString": { value: function () { return this.checker.typeToString(this); } },
});
var nodeConstructors = [
ts.objectAllocator.getNodeConstructor(),
ts.objectAllocator.getIdentifierConstructor(),
ts.objectAllocator.getTokenConstructor(),
ts.objectAllocator.getSourceFileConstructor()
];
for (var _i = 0, nodeConstructors_1 = nodeConstructors; _i < nodeConstructors_1.length; _i++) {
var ctor = nodeConstructors_1[_i];
if (!ctor.prototype.hasOwnProperty("__debugKind")) {
Object.defineProperties(ctor.prototype, {
"__debugKind": { get: function () { return ts.formatSyntaxKind(this.kind); } },
"__debugModifierFlags": { get: function () { return ts.formatModifierFlags(ts.getModifierFlagsNoCache(this)); } },
"__debugTransformFlags": { get: function () { return ts.formatTransformFlags(this.transformFlags); } },
"__debugEmitFlags": { get: function () { return ts.formatEmitFlags(ts.getEmitFlags(this)); } },
"__debugGetText": {
value: function (includeTrivia) {
if (ts.nodeIsSynthesized(this))
return "";
var parseNode = ts.getParseTreeNode(this);
var sourceFile = parseNode && ts.getSourceFileOfNode(parseNode);
return sourceFile ? ts.getSourceTextOfNodeFromSourceFile(sourceFile, parseNode, includeTrivia) : "";
}
}
});
}
}
isDebugInfoEnabled = true;
}
Debug.enableDebugInfo = enableDebugInfo;
})(Debug = ts.Debug || (ts.Debug = {}));
})(ts || (ts = {}));
var ts;
(function (ts) {
function getOriginalNodeId(node) {
node = ts.getOriginalNode(node);
return node ? ts.getNodeId(node) : 0;
}
ts.getOriginalNodeId = getOriginalNodeId;
function collectExternalModuleInfo(sourceFile, resolver, compilerOptions) {
var externalImports = [];
var exportSpecifiers = ts.createMultiMap();
var exportedBindings = [];
var uniqueExports = ts.createMap();
var exportedNames;
var hasExportDefault = false;
var exportEquals = undefined;
var hasExportStarsToExportValues = false;
for (var _i = 0, _a = sourceFile.statements; _i < _a.length; _i++) {
var node = _a[_i];
switch (node.kind) {
case 238:
externalImports.push(node);
break;
case 237:
if (node.moduleReference.kind === 248) {
externalImports.push(node);
}
break;
case 244:
if (node.moduleSpecifier) {
if (!node.exportClause) {
externalImports.push(node);
hasExportStarsToExportValues = true;
}
else {
externalImports.push(node);
}
}
else {
for (var _b = 0, _c = node.exportClause.elements; _b < _c.length; _b++) {
var specifier = _c[_b];
if (!uniqueExports.get(ts.idText(specifier.name))) {
var name = specifier.propertyName || specifier.name;
exportSpecifiers.add(ts.idText(name), specifier);
var decl = resolver.getReferencedImportDeclaration(name)
|| resolver.getReferencedValueDeclaration(name);
if (decl) {
multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(decl), specifier.name);
}
uniqueExports.set(ts.idText(specifier.name), true);
exportedNames = ts.append(exportedNames, specifier.name);
}
}
}
break;
case 243:
if (node.isExportEquals && !exportEquals) {
exportEquals = node;
}
break;
case 208:
if (ts.hasModifier(node, 1)) {
for (var _d = 0, _e = node.declarationList.declarations; _d < _e.length; _d++) {
var decl = _e[_d];
exportedNames = collectExportedVariableInfo(decl, uniqueExports, exportedNames);
}
}
break;
case 228:
if (ts.hasModifier(node, 1)) {
if (ts.hasModifier(node, 512)) {
if (!hasExportDefault) {
multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(node), ts.getDeclarationName(node));
hasExportDefault = true;
}
}
else {
var name = node.name;
if (!uniqueExports.get(ts.idText(name))) {
multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(node), name);
uniqueExports.set(ts.idText(name), true);
exportedNames = ts.append(exportedNames, name);
}
}
}
break;
case 229:
if (ts.hasModifier(node, 1)) {
if (ts.hasModifier(node, 512)) {
if (!hasExportDefault) {
multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(node), ts.getDeclarationName(node));
hasExportDefault = true;
}
}
else {
var name = node.name;
if (name && !uniqueExports.get(ts.idText(name))) {
multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(node), name);
uniqueExports.set(ts.idText(name), true);
exportedNames = ts.append(exportedNames, name);
}
}
}
break;
}
}
var externalHelpersModuleName = ts.getOrCreateExternalHelpersModuleNameIfNeeded(sourceFile, compilerOptions, hasExportStarsToExportValues);
var externalHelpersImportDeclaration = externalHelpersModuleName && ts.createImportDeclaration(undefined, undefined, ts.createImportClause(undefined, ts.createNamespaceImport(externalHelpersModuleName)), ts.createLiteral(ts.externalHelpersModuleNameText));
if (externalHelpersImportDeclaration) {
externalImports.unshift(externalHelpersImportDeclaration);
}
return { externalImports: externalImports, exportSpecifiers: exportSpecifiers, exportEquals: exportEquals, hasExportStarsToExportValues: hasExportStarsToExportValues, exportedBindings: exportedBindings, exportedNames: exportedNames, externalHelpersImportDeclaration: externalHelpersImportDeclaration };
}
ts.collectExternalModuleInfo = collectExternalModuleInfo;
function collectExportedVariableInfo(decl, uniqueExports, exportedNames) {
if (ts.isBindingPattern(decl.name)) {
for (var _i = 0, _a = decl.name.elements; _i < _a.length; _i++) {
var element = _a[_i];
if (!ts.isOmittedExpression(element)) {
exportedNames = collectExportedVariableInfo(element, uniqueExports, exportedNames);
}
}
}
else if (!ts.isGeneratedIdentifier(decl.name)) {
var text = ts.idText(decl.name);
if (!uniqueExports.get(text)) {
uniqueExports.set(text, true);
exportedNames = ts.append(exportedNames, decl.name);
}
}
return exportedNames;
}
function multiMapSparseArrayAdd(map, key, value) {
var values = map[key];
if (values) {
values.push(value);
}
else {
map[key] = values = [value];
}
return values;
}
function isSimpleCopiableExpression(expression) {
return expression.kind === 9 ||
expression.kind === 8 ||
expression.kind === 13 ||
ts.isKeyword(expression.kind) ||
ts.isIdentifier(expression);
}
ts.isSimpleCopiableExpression = isSimpleCopiableExpression;
})(ts || (ts = {}));
var ts;
(function (ts) {
function flattenDestructuringAssignment(node, visitor, context, level, needsValue, createAssignmentCallback) {
var location = node;
var value;
if (ts.isDestructuringAssignment(node)) {
value = node.right;
while (ts.isEmptyArrayLiteral(node.left) || ts.isEmptyObjectLiteral(node.left)) {
if (ts.isDestructuringAssignment(value)) {
location = node = value;
value = node.right;
}
else {
return value;
}
}
}
var expressions;
var flattenContext = {
context: context,
level: level,
downlevelIteration: context.getCompilerOptions().downlevelIteration,
hoistTempVariables: true,
emitExpression: emitExpression,
emitBindingOrAssignment: emitBindingOrAssignment,
createArrayBindingOrAssignmentPattern: makeArrayAssignmentPattern,
createObjectBindingOrAssignmentPattern: makeObjectAssignmentPattern,
createArrayBindingOrAssignmentElement: makeAssignmentElement,
visitor: visitor
};
if (value) {
value = ts.visitNode(value, visitor, ts.isExpression);
if (needsValue) {
value = ensureIdentifier(flattenContext, value, true, location);
}
else if (ts.nodeIsSynthesized(node)) {
location = value;
}
}
flattenBindingOrAssignmentElement(flattenContext, node, value, location, ts.isDestructuringAssignment(node));
if (value && needsValue) {
if (!ts.some(expressions)) {
return value;
}
expressions.push(value);
}
return ts.aggregateTransformFlags(ts.inlineExpressions(expressions)) || ts.createOmittedExpression();
function emitExpression(expression) {
ts.setEmitFlags(expression, 64);
ts.aggregateTransformFlags(expression);
expressions = ts.append(expressions, expression);
}
function emitBindingOrAssignment(target, value, location, original) {
ts.Debug.assertNode(target, createAssignmentCallback ? ts.isIdentifier : ts.isExpression);
var expression = createAssignmentCallback
? createAssignmentCallback(target, value, location)
: ts.setTextRange(ts.createAssignment(ts.visitNode(target, visitor, ts.isExpression), value), location);
expression.original = original;
emitExpression(expression);
}
}
ts.flattenDestructuringAssignment = flattenDestructuringAssignment;
function flattenDestructuringBinding(node, visitor, context, level, rval, hoistTempVariables, skipInitializer) {
var pendingExpressions;
var pendingDeclarations = [];
var declarations = [];
var flattenContext = {
context: context,
level: level,
downlevelIteration: context.getCompilerOptions().downlevelIteration,
hoistTempVariables: hoistTempVariables,
emitExpression: emitExpression,
emitBindingOrAssignment: emitBindingOrAssignment,
createArrayBindingOrAssignmentPattern: makeArrayBindingPattern,
createObjectBindingOrAssignmentPattern: makeObjectBindingPattern,
createArrayBindingOrAssignmentElement: makeBindingElement,
visitor: visitor
};
flattenBindingOrAssignmentElement(flattenContext, node, rval, node, skipInitializer);
if (pendingExpressions) {
var temp = ts.createTempVariable(undefined);
if (hoistTempVariables) {
var value = ts.inlineExpressions(pendingExpressions);
pendingExpressions = undefined;
emitBindingOrAssignment(temp, value, undefined, undefined);
}
else {
context.hoistVariableDeclaration(temp);
var pendingDeclaration = ts.lastOrUndefined(pendingDeclarations);
pendingDeclaration.pendingExpressions = ts.append(pendingDeclaration.pendingExpressions, ts.createAssignment(temp, pendingDeclaration.value));
ts.addRange(pendingDeclaration.pendingExpressions, pendingExpressions);
pendingDeclaration.value = temp;
}
}
for (var _i = 0, pendingDeclarations_1 = pendingDeclarations; _i < pendingDeclarations_1.length; _i++) {
var _a = pendingDeclarations_1[_i], pendingExpressions_1 = _a.pendingExpressions, name = _a.name, value = _a.value, location = _a.location, original = _a.original;
var variable = ts.createVariableDeclaration(name, undefined, pendingExpressions_1 ? ts.inlineExpressions(ts.append(pendingExpressions_1, value)) : value);
variable.original = original;
ts.setTextRange(variable, location);
if (ts.isIdentifier(name)) {
ts.setEmitFlags(variable, 64);
}
ts.aggregateTransformFlags(variable);
declarations.push(variable);
}
return declarations;
function emitExpression(value) {
pendingExpressions = ts.append(pendingExpressions, value);
}
function emitBindingOrAssignment(target, value, location, original) {
ts.Debug.assertNode(target, ts.isBindingName);
if (pendingExpressions) {
value = ts.inlineExpressions(ts.append(pendingExpressions, value));
pendingExpressions = undefined;
}
pendingDeclarations.push({ pendingExpressions: pendingExpressions, name: target, value: value, location: location, original: original });
}
}
ts.flattenDestructuringBinding = flattenDestructuringBinding;
function flattenBindingOrAssignmentElement(flattenContext, element, value, location, skipInitializer) {
if (!skipInitializer) {
var initializer = ts.visitNode(ts.getInitializerOfBindingOrAssignmentElement(element), flattenContext.visitor, ts.isExpression);
if (initializer) {
value = value ? createDefaultValueCheck(flattenContext, value, initializer, location) : initializer;
}
else if (!value) {
value = ts.createVoidZero();
}
}
var bindingTarget = ts.getTargetOfBindingOrAssignmentElement(element);
if (ts.isObjectBindingOrAssignmentPattern(bindingTarget)) {
flattenObjectBindingOrAssignmentPattern(flattenContext, element, bindingTarget, value, location);
}
else if (ts.isArrayBindingOrAssignmentPattern(bindingTarget)) {
flattenArrayBindingOrAssignmentPattern(flattenContext, element, bindingTarget, value, location);
}
else {
flattenContext.emitBindingOrAssignment(bindingTarget, value, location, element);
}
}
function flattenObjectBindingOrAssignmentPattern(flattenContext, parent, pattern, value, location) {
var elements = ts.getElementsOfBindingOrAssignmentPattern(pattern);
var numElements = elements.length;
if (numElements !== 1) {
var reuseIdentifierExpressions = !ts.isDeclarationBindingElement(parent) || numElements !== 0;
value = ensureIdentifier(flattenContext, value, reuseIdentifierExpressions, location);
}
var bindingElements;
var computedTempVariables;
for (var i = 0; i < numElements; i++) {
var element = elements[i];
if (!ts.getRestIndicatorOfBindingOrAssignmentElement(element)) {
var propertyName = ts.getPropertyNameOfBindingOrAssignmentElement(element);
if (flattenContext.level >= 1
&& !(element.transformFlags & (524288 | 1048576))
&& !(ts.getTargetOfBindingOrAssignmentElement(element).transformFlags & (524288 | 1048576))
&& !ts.isComputedPropertyName(propertyName)) {
bindingElements = ts.append(bindingElements, element);
}
else {
if (bindingElements) {
flattenContext.emitBindingOrAssignment(flattenContext.createObjectBindingOrAssignmentPattern(bindingElements), value, location, pattern);
bindingElements = undefined;
}
var rhsValue = createDestructuringPropertyAccess(flattenContext, value, propertyName);
if (ts.isComputedPropertyName(propertyName)) {
computedTempVariables = ts.append(computedTempVariables, rhsValue.argumentExpression);
}
flattenBindingOrAssignmentElement(flattenContext, element, rhsValue, element);
}
}
else if (i === numElements - 1) {
if (bindingElements) {
flattenContext.emitBindingOrAssignment(flattenContext.createObjectBindingOrAssignmentPattern(bindingElements), value, location, pattern);
bindingElements = undefined;
}
var rhsValue = createRestCall(flattenContext.context, value, elements, computedTempVariables, pattern);
flattenBindingOrAssignmentElement(flattenContext, element, rhsValue, element);
}
}
if (bindingElements) {
flattenContext.emitBindingOrAssignment(flattenContext.createObjectBindingOrAssignmentPattern(bindingElements), value, location, pattern);
}
}
function flattenArrayBindingOrAssignmentPattern(flattenContext, parent, pattern, value, location) {
var elements = ts.getElementsOfBindingOrAssignmentPattern(pattern);
var numElements = elements.length;
if (flattenContext.level < 1 && flattenContext.downlevelIteration) {
value = ensureIdentifier(flattenContext, ts.createReadHelper(flattenContext.context, value, numElements > 0 && ts.getRestIndicatorOfBindingOrAssignmentElement(elements[numElements - 1])
? undefined
: numElements, location), false, location);
}
else if (numElements !== 1 && (flattenContext.level < 1 || numElements === 0)
|| ts.every(elements, ts.isOmittedExpression)) {
var reuseIdentifierExpressions = !ts.isDeclarationBindingElement(parent) || numElements !== 0;
value = ensureIdentifier(flattenContext, value, reuseIdentifierExpressions, location);
}
var bindingElements;
var restContainingElements;
for (var i = 0; i < numElements; i++) {
var element = elements[i];
if (flattenContext.level >= 1) {
if (element.transformFlags & 1048576) {
var temp = ts.createTempVariable(undefined);
if (flattenContext.hoistTempVariables) {
flattenContext.context.hoistVariableDeclaration(temp);
}
restContainingElements = ts.append(restContainingElements, [temp, element]);
bindingElements = ts.append(bindingElements, flattenContext.createArrayBindingOrAssignmentElement(temp));
}
else {
bindingElements = ts.append(bindingElements, element);
}
}
else if (ts.isOmittedExpression(element)) {
continue;
}
else if (!ts.getRestIndicatorOfBindingOrAssignmentElement(element)) {
var rhsValue = ts.createElementAccess(value, i);
flattenBindingOrAssignmentElement(flattenContext, element, rhsValue, element);
}
else if (i === numElements - 1) {
var rhsValue = ts.createArraySlice(value, i);
flattenBindingOrAssignmentElement(flattenContext, element, rhsValue, element);
}
}
if (bindingElements) {
flattenContext.emitBindingOrAssignment(flattenContext.createArrayBindingOrAssignmentPattern(bindingElements), value, location, pattern);
}
if (restContainingElements) {
for (var _i = 0, restContainingElements_1 = restContainingElements; _i < restContainingElements_1.length; _i++) {
var _a = restContainingElements_1[_i], id = _a[0], element = _a[1];
flattenBindingOrAssignmentElement(flattenContext, element, id, element);
}
}
}
function createDefaultValueCheck(flattenContext, value, defaultValue, location) {
value = ensureIdentifier(flattenContext, value, true, location);
return ts.createConditional(ts.createTypeCheck(value, "undefined"), defaultValue, value);
}
function createDestructuringPropertyAccess(flattenContext, value, propertyName) {
if (ts.isComputedPropertyName(propertyName)) {
var argumentExpression = ensureIdentifier(flattenContext, ts.visitNode(propertyName.expression, flattenContext.visitor), false, propertyName);
return ts.createElementAccess(value, argumentExpression);
}
else if (ts.isStringOrNumericLiteral(propertyName)) {
var argumentExpression = ts.getSynthesizedClone(propertyName);
argumentExpression.text = argumentExpression.text;
return ts.createElementAccess(value, argumentExpression);
}
else {
var name = ts.createIdentifier(ts.idText(propertyName));
return ts.createPropertyAccess(value, name);
}
}
function ensureIdentifier(flattenContext, value, reuseIdentifierExpressions, location) {
if (ts.isIdentifier(value) && reuseIdentifierExpressions) {
return value;
}
else {
var temp = ts.createTempVariable(undefined);
if (flattenContext.hoistTempVariables) {
flattenContext.context.hoistVariableDeclaration(temp);
flattenContext.emitExpression(ts.setTextRange(ts.createAssignment(temp, value), location));
}
else {
flattenContext.emitBindingOrAssignment(temp, value, location, undefined);
}
return temp;
}
}
function makeArrayBindingPattern(elements) {
ts.Debug.assertEachNode(elements, ts.isArrayBindingElement);
return ts.createArrayBindingPattern(elements);
}
function makeArrayAssignmentPattern(elements) {
return ts.createArrayLiteral(ts.map(elements, ts.convertToArrayAssignmentElement));
}
function makeObjectBindingPattern(elements) {
ts.Debug.assertEachNode(elements, ts.isBindingElement);
return ts.createObjectBindingPattern(elements);
}
function makeObjectAssignmentPattern(elements) {
return ts.createObjectLiteral(ts.map(elements, ts.convertToObjectAssignmentElement));
}
function makeBindingElement(name) {
return ts.createBindingElement(undefined, undefined, name);
}
function makeAssignmentElement(name) {
return name;
}
var restHelper = {
name: "typescript:rest",
scoped: false,
text: "\n var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\n t[p[i]] = s[p[i]];\n return t;\n };"
};
function createRestCall(context, value, elements, computedTempVariables, location) {
context.requestEmitHelper(restHelper);
var propertyNames = [];
var computedTempVariableOffset = 0;
for (var i = 0; i < elements.length - 1; i++) {
var propertyName = ts.getPropertyNameOfBindingOrAssignmentElement(elements[i]);
if (propertyName) {
if (ts.isComputedPropertyName(propertyName)) {
var temp = computedTempVariables[computedTempVariableOffset];
computedTempVariableOffset++;
propertyNames.push(ts.createConditional(ts.createTypeCheck(temp, "symbol"), temp, ts.createAdd(temp, ts.createLiteral(""))));
}
else {
propertyNames.push(ts.createLiteral(propertyName));
}
}
}
return ts.createCall(ts.getHelperName("__rest"), undefined, [
value,
ts.setTextRange(ts.createArrayLiteral(propertyNames), location)
]);
}
})(ts || (ts = {}));
var ts;
(function (ts) {
var USE_NEW_TYPE_METADATA_FORMAT = false;
function transformTypeScript(context) {
var startLexicalEnvironment = context.startLexicalEnvironment, resumeLexicalEnvironment = context.resumeLexicalEnvironment, endLexicalEnvironment = context.endLexicalEnvironment, hoistVariableDeclaration = context.hoistVariableDeclaration;
var resolver = context.getEmitResolver();
var compilerOptions = context.getCompilerOptions();
var strictNullChecks = typeof compilerOptions.strictNullChecks === "undefined" ? compilerOptions.strict : compilerOptions.strictNullChecks;
var languageVersion = ts.getEmitScriptTarget(compilerOptions);
var moduleKind = ts.getEmitModuleKind(compilerOptions);
var previousOnEmitNode = context.onEmitNode;
var previousOnSubstituteNode = context.onSubstituteNode;
context.onEmitNode = onEmitNode;
context.onSubstituteNode = onSubstituteNode;
context.enableSubstitution(179);
context.enableSubstitution(180);
var currentSourceFile;
var currentNamespace;
var currentNamespaceContainerName;
var currentScope;
var currentScopeFirstDeclarationsOfName;
var enabledSubstitutions;
var classAliases;
var applicableSubstitutions;
return transformSourceFile;
function transformSourceFile(node) {
if (node.isDeclarationFile) {
return node;
}
currentSourceFile = node;
var visited = saveStateAndInvoke(node, visitSourceFile);
ts.addEmitHelpers(visited, context.readEmitHelpers());
currentSourceFile = undefined;
return visited;
}
function saveStateAndInvoke(node, f) {
var savedCurrentScope = currentScope;
var savedCurrentScopeFirstDeclarationsOfName = currentScopeFirstDeclarationsOfName;
onBeforeVisitNode(node);
var visited = f(node);
if (currentScope !== savedCurrentScope) {
currentScopeFirstDeclarationsOfName = savedCurrentScopeFirstDeclarationsOfName;
}
currentScope = savedCurrentScope;
return visited;
}
function onBeforeVisitNode(node) {
switch (node.kind) {
case 265:
case 235:
case 234:
case 207:
currentScope = node;
currentScopeFirstDeclarationsOfName = undefined;
break;
case 229:
case 228:
if (ts.hasModifier(node, 2)) {
break;
}
if (node.name) {
recordEmittedDeclarationInScope(node);
}
else {
ts.Debug.assert(node.kind === 229 || ts.hasModifier(node, 512));
}
break;
}
}
function visitor(node) {
return saveStateAndInvoke(node, visitorWorker);
}
function visitorWorker(node) {
if (node.transformFlags & 1) {
return visitTypeScript(node);
}
else if (node.transformFlags & 2) {
return ts.visitEachChild(node, visitor, context);
}
return node;
}
function sourceElementVisitor(node) {
return saveStateAndInvoke(node, sourceElementVisitorWorker);
}
function sourceElementVisitorWorker(node) {
switch (node.kind) {
case 238:
case 237:
case 243:
case 244:
return visitEllidableStatement(node);
default:
return visitorWorker(node);
}
}
function visitEllidableStatement(node) {
var parsed = ts.getParseTreeNode(node);
if (parsed !== node) {
return node;
}
switch (node.kind) {
case 238:
return visitImportDeclaration(node);
case 237:
return visitImportEqualsDeclaration(node);
case 243:
return visitExportAssignment(node);
case 244:
return visitExportDeclaration(node);
default:
ts.Debug.fail("Unhandled ellided statement");
}
}
function namespaceElementVisitor(node) {
return saveStateAndInvoke(node, namespaceElementVisitorWorker);
}
function namespaceElementVisitorWorker(node) {
if (node.kind === 244 ||
node.kind === 238 ||
node.kind === 239 ||
(node.kind === 237 &&
node.moduleReference.kind === 248)) {
return undefined;
}
else if (node.transformFlags & 1 || ts.hasModifier(node, 1)) {
return visitTypeScript(node);
}
else if (node.transformFlags & 2) {
return ts.visitEachChild(node, visitor, context);
}
return node;
}
function classElementVisitor(node) {
return saveStateAndInvoke(node, classElementVisitorWorker);
}
function classElementVisitorWorker(node) {
switch (node.kind) {
case 152:
return undefined;
case 149:
case 157:
case 153:
case 154:
case 151:
return visitorWorker(node);
case 206:
return node;
default:
ts.Debug.failBadSyntaxKind(node);
return undefined;
}
}
function modifierVisitor(node) {
if (ts.modifierToFlag(node.kind) & 2270) {
return undefined;
}
else if (currentNamespace && node.kind === 84) {
return undefined;
}
return node;
}
function visitTypeScript(node) {
if (ts.hasModifier(node, 2) && ts.isStatement(node)) {
return ts.createNotEmittedStatement(node);
}
switch (node.kind) {
case 84:
case 79:
return currentNamespace ? undefined : node;
case 114:
case 112:
case 113:
case 117:
case 76:
case 124:
case 131:
case 164:
case 165:
case 163:
case 158:
case 145:
case 119:
case 122:
case 136:
case 133:
case 130:
case 105:
case 137:
case 161:
case 160:
case 162:
case 159:
case 166:
case 167:
case 168:
case 169:
case 170:
case 171:
case 172:
case 173:
case 157:
case 147:
case 231:
case 149:
case 236:
return undefined;
case 152:
return visitConstructor(node);
case 230:
return ts.createNotEmittedStatement(node);
case 229:
return visitClassDeclaration(node);
case 199:
return visitClassExpression(node);
case 259:
return visitHeritageClause(node);
case 201:
return visitExpressionWithTypeArguments(node);
case 151:
return visitMethodDeclaration(node);
case 153:
return visitGetAccessor(node);
case 154:
return visitSetAccessor(node);
case 228:
return visitFunctionDeclaration(node);
case 186:
return visitFunctionExpression(node);
case 187:
return visitArrowFunction(node);
case 146:
return visitParameter(node);
case 185:
return visitParenthesizedExpression(node);
case 184:
case 202:
return visitAssertionExpression(node);
case 181:
return visitCallExpression(node);
case 182:
return visitNewExpression(node);
case 203:
return visitNonNullExpression(node);
case 232:
return visitEnumDeclaration(node);
case 208:
return visitVariableStatement(node);
case 226:
return visitVariableDeclaration(node);
case 233:
return visitModuleDeclaration(node);
case 237:
return visitImportEqualsDeclaration(node);
default:
ts.Debug.failBadSyntaxKind(node);
return ts.visitEachChild(node, visitor, context);
}
}
function visitSourceFile(node) {
var alwaysStrict = (compilerOptions.alwaysStrict === undefined ? compilerOptions.strict : compilerOptions.alwaysStrict) &&
!(ts.isExternalModule(node) && moduleKind >= ts.ModuleKind.ES2015);
return ts.updateSourceFileNode(node, ts.visitLexicalEnvironment(node.statements, sourceElementVisitor, context, 0, alwaysStrict));
}
function shouldEmitDecorateCallForClass(node) {
if (node.decorators && node.decorators.length > 0) {
return true;
}
var constructor = ts.getFirstConstructorWithBody(node);
if (constructor) {
return ts.forEach(constructor.parameters, shouldEmitDecorateCallForParameter);
}
return false;
}
function shouldEmitDecorateCallForParameter(parameter) {
return parameter.decorators !== undefined && parameter.decorators.length > 0;
}
function getClassFacts(node, staticProperties) {
var facts = 0;
if (ts.some(staticProperties))
facts |= 1;
var extendsClauseElement = ts.getClassExtendsHeritageClauseElement(node);
if (extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 95)
facts |= 64;
if (shouldEmitDecorateCallForClass(node))
facts |= 2;
if (ts.childIsDecorated(node))
facts |= 4;
if (isExportOfNamespace(node))
facts |= 8;
else if (isDefaultExternalModuleExport(node))
facts |= 32;
else if (isNamedExternalModuleExport(node))
facts |= 16;
if (languageVersion <= 1 && (facts & 7))
facts |= 128;
return facts;
}
function visitClassDeclaration(node) {
var staticProperties = getInitializedProperties(node, true);
var facts = getClassFacts(node, staticProperties);
if (facts & 128) {
context.startLexicalEnvironment();
}
var name = node.name || (facts & 5 ? ts.getGeneratedNameForNode(node) : undefined);
var classStatement = facts & 2
? createClassDeclarationHeadWithDecorators(node, name, facts)
: createClassDeclarationHeadWithoutDecorators(node, name, facts);
var statements = [classStatement];
if (facts & 1) {
addInitializedPropertyStatements(statements, staticProperties, facts & 128 ? ts.getInternalName(node) : ts.getLocalName(node));
}
addClassElementDecorationStatements(statements, node, false);
addClassElementDecorationStatements(statements, node, true);
addConstructorDecorationStatement(statements, node);
if (facts & 128) {
var closingBraceLocation = ts.createTokenRange(ts.skipTrivia(currentSourceFile.text, node.members.end), 18);
var localName = ts.getInternalName(node);
var outer = ts.createPartiallyEmittedExpression(localName);
outer.end = closingBraceLocation.end;
ts.setEmitFlags(outer, 1536);
var statement = ts.createReturn(outer);
statement.pos = closingBraceLocation.pos;
ts.setEmitFlags(statement, 1536 | 384);
statements.push(statement);
ts.addRange(statements, context.endLexicalEnvironment());
var iife = ts.createImmediatelyInvokedArrowFunction(statements);
ts.setEmitFlags(iife, 33554432);
var varStatement = ts.createVariableStatement(undefined, ts.createVariableDeclarationList([
ts.createVariableDeclaration(ts.getLocalName(node, false, false), undefined, iife)
]));
ts.setOriginalNode(varStatement, node);
ts.setCommentRange(varStatement, node);
ts.setSourceMapRange(varStatement, ts.moveRangePastDecorators(node));
ts.startOnNewLine(varStatement);
statements = [varStatement];
}
if (facts & 8) {
addExportMemberAssignment(statements, node);
}
else if (facts & 128 || facts & 2) {
if (facts & 32) {
statements.push(ts.createExportDefault(ts.getLocalName(node, false, true)));
}
else if (facts & 16) {
statements.push(ts.createExternalModuleExport(ts.getLocalName(node, false, true)));
}
}
if (statements.length > 1) {
statements.push(ts.createEndOfDeclarationMarker(node));
ts.setEmitFlags(classStatement, ts.getEmitFlags(classStatement) | 4194304);
}
return ts.singleOrMany(statements);
}
function createClassDeclarationHeadWithoutDecorators(node, name, facts) {
var modifiers = !(facts & 128)
? ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier)
: undefined;
var classDeclaration = ts.createClassDeclaration(undefined, modifiers, name, undefined, ts.visitNodes(node.heritageClauses, visitor, ts.isHeritageClause), transformClassMembers(node, (facts & 64) !== 0));
var emitFlags = ts.getEmitFlags(node);
if (facts & 1) {
emitFlags |= 32;
}
ts.setTextRange(classDeclaration, node);
ts.setOriginalNode(classDeclaration, node);
ts.setEmitFlags(classDeclaration, emitFlags);
return classDeclaration;
}
function createClassDeclarationHeadWithDecorators(node, name, facts) {
var location = ts.moveRangePastDecorators(node);
var classAlias = getClassAliasIfNeeded(node);
var declName = ts.getLocalName(node, false, true);
var heritageClauses = ts.visitNodes(node.heritageClauses, visitor, ts.isHeritageClause);
var members = transformClassMembers(node, (facts & 64) !== 0);
var classExpression = ts.createClassExpression(undefined, name, undefined, heritageClauses, members);
ts.setOriginalNode(classExpression, node);
ts.setTextRange(classExpression, location);
var statement = ts.createVariableStatement(undefined, ts.createVariableDeclarationList([
ts.createVariableDeclaration(declName, undefined, classAlias ? ts.createAssignment(classAlias, classExpression) : classExpression)
], 1));
ts.setOriginalNode(statement, node);
ts.setTextRange(statement, location);
ts.setCommentRange(statement, node);
return statement;
}
function visitClassExpression(node) {
var staticProperties = getInitializedProperties(node, true);
var heritageClauses = ts.visitNodes(node.heritageClauses, visitor, ts.isHeritageClause);
var members = transformClassMembers(node, ts.some(heritageClauses, function (c) { return c.token === 85; }));
var classExpression = ts.createClassExpression(undefined, node.name, undefined, heritageClauses, members);
ts.setOriginalNode(classExpression, node);
ts.setTextRange(classExpression, node);
if (staticProperties.length > 0) {
var expressions = [];
var temp = ts.createTempVariable(hoistVariableDeclaration);
if (resolver.getNodeCheckFlags(node) & 8388608) {
enableSubstitutionForClassAliases();
classAliases[ts.getOriginalNodeId(node)] = ts.getSynthesizedClone(temp);
}
ts.setEmitFlags(classExpression, 65536 | ts.getEmitFlags(classExpression));
expressions.push(ts.startOnNewLine(ts.createAssignment(temp, classExpression)));
ts.addRange(expressions, generateInitializedPropertyExpressions(staticProperties, temp));
expressions.push(ts.startOnNewLine(temp));
return ts.inlineExpressions(expressions);
}
return classExpression;
}
function transformClassMembers(node, isDerivedClass) {
var members = [];
var constructor = transformConstructor(node, isDerivedClass);
if (constructor) {
members.push(constructor);
}
ts.addRange(members, ts.visitNodes(node.members, classElementVisitor, ts.isClassElement));
return ts.setTextRange(ts.createNodeArray(members), node.members);
}
function transformConstructor(node, isDerivedClass) {
var hasInstancePropertyWithInitializer = ts.forEach(node.members, isInstanceInitializedProperty);
var hasParameterPropertyAssignments = node.transformFlags & 262144;
var constructor = ts.getFirstConstructorWithBody(node);
if (!hasInstancePropertyWithInitializer && !hasParameterPropertyAssignments) {
return ts.visitEachChild(constructor, visitor, context);
}
var parameters = transformConstructorParameters(constructor);
var body = transformConstructorBody(node, constructor, isDerivedClass);
return ts.startOnNewLine(ts.setOriginalNode(ts.setTextRange(ts.createConstructor(undefined, undefined, parameters, body), constructor || node), constructor));
}
function transformConstructorParameters(constructor) {
return ts.visitParameterList(constructor && constructor.parameters, visitor, context)
|| [];
}
function transformConstructorBody(node, constructor, isDerivedClass) {
var statements = [];
var indexOfFirstStatement = 0;
resumeLexicalEnvironment();
if (constructor) {
indexOfFirstStatement = addPrologueDirectivesAndInitialSuperCall(constructor, statements);
var propertyAssignments = getParametersWithPropertyAssignments(constructor);
ts.addRange(statements, ts.map(propertyAssignments, transformParameterWithPropertyAssignment));
}
else if (isDerivedClass) {
statements.push(ts.createStatement(ts.createCall(ts.createSuper(), undefined, [ts.createSpread(ts.createIdentifier("arguments"))])));
}
var properties = getInitializedProperties(node, false);
addInitializedPropertyStatements(statements, properties, ts.createThis());
if (constructor) {
ts.addRange(statements, ts.visitNodes(constructor.body.statements, visitor, ts.isStatement, indexOfFirstStatement));
}
statements = ts.mergeLexicalEnvironment(statements, endLexicalEnvironment());
return ts.setTextRange(ts.createBlock(ts.setTextRange(ts.createNodeArray(statements), constructor ? constructor.body.statements : node.members), true), constructor ? constructor.body : undefined);
}
function addPrologueDirectivesAndInitialSuperCall(ctor, result) {
if (ctor.body) {
var statements = ctor.body.statements;
var index = ts.addPrologue(result, statements, false, visitor);
if (index === statements.length) {
return index;
}
var statement = statements[index];
if (statement.kind === 210 && ts.isSuperCall(statement.expression)) {
result.push(ts.visitNode(statement, visitor, ts.isStatement));
return index + 1;
}
return index;
}
return 0;
}
function getParametersWithPropertyAssignments(node) {
return ts.filter(node.parameters, isParameterWithPropertyAssignment);
}
function isParameterWithPropertyAssignment(parameter) {
return ts.hasModifier(parameter, 92)
&& ts.isIdentifier(parameter.name);
}
function transformParameterWithPropertyAssignment(node) {
ts.Debug.assert(ts.isIdentifier(node.name));
var name = node.name;
var propertyName = ts.getMutableClone(name);
ts.setEmitFlags(propertyName, 1536 | 48);
var localName = ts.getMutableClone(name);
ts.setEmitFlags(localName, 1536);
return ts.startOnNewLine(ts.setTextRange(ts.createStatement(ts.createAssignment(ts.setTextRange(ts.createPropertyAccess(ts.createThis(), propertyName), node.name), localName)), ts.moveRangePos(node, -1)));
}
function getInitializedProperties(node, isStatic) {
return ts.filter(node.members, isStatic ? isStaticInitializedProperty : isInstanceInitializedProperty);
}
function isStaticInitializedProperty(member) {
return isInitializedProperty(member, true);
}
function isInstanceInitializedProperty(member) {
return isInitializedProperty(member, false);
}
function isInitializedProperty(member, isStatic) {
return member.kind === 149
&& isStatic === ts.hasModifier(member, 32)
&& member.initializer !== undefined;
}
function addInitializedPropertyStatements(statements, properties, receiver) {
for (var _i = 0, properties_10 = properties; _i < properties_10.length; _i++) {
var property = properties_10[_i];
var statement = ts.createStatement(transformInitializedProperty(property, receiver));
ts.setSourceMapRange(statement, ts.moveRangePastModifiers(property));
ts.setCommentRange(statement, property);
statements.push(statement);
}
}
function generateInitializedPropertyExpressions(properties, receiver) {
var expressions = [];
for (var _i = 0, properties_11 = properties; _i < properties_11.length; _i++) {
var property = properties_11[_i];
var expression = transformInitializedProperty(property, receiver);
expression.startsOnNewLine = true;
ts.setSourceMapRange(expression, ts.moveRangePastModifiers(property));
ts.setCommentRange(expression, property);
expressions.push(expression);
}
return expressions;
}
function transformInitializedProperty(property, receiver) {
var propertyName = visitPropertyNameOfClassElement(property);
var initializer = ts.visitNode(property.initializer, visitor, ts.isExpression);
var memberAccess = ts.createMemberAccessForPropertyName(receiver, propertyName, propertyName);
return ts.createAssignment(memberAccess, initializer);
}
function getDecoratedClassElements(node, isStatic) {
return ts.filter(node.members, isStatic ? isStaticDecoratedClassElement : isInstanceDecoratedClassElement);
}
function isStaticDecoratedClassElement(member) {
return isDecoratedClassElement(member, true);
}
function isInstanceDecoratedClassElement(member) {
return isDecoratedClassElement(member, false);
}
function isDecoratedClassElement(member, isStatic) {
return ts.nodeOrChildIsDecorated(member)
&& isStatic === ts.hasModifier(member, 32);
}
function getDecoratorsOfParameters(node) {
var decorators;
if (node) {
var parameters = node.parameters;
for (var i = 0; i < parameters.length; i++) {
var parameter = parameters[i];
if (decorators || parameter.decorators) {
if (!decorators) {
decorators = new Array(parameters.length);
}
decorators[i] = parameter.decorators;
}
}
}
return decorators;
}
function getAllDecoratorsOfConstructor(node) {
var decorators = node.decorators;
var parameters = getDecoratorsOfParameters(ts.getFirstConstructorWithBody(node));
if (!decorators && !parameters) {
return undefined;
}
return {
decorators: decorators,
parameters: parameters
};
}
function getAllDecoratorsOfClassElement(node, member) {
switch (member.kind) {
case 153:
case 154:
return getAllDecoratorsOfAccessors(node, member);
case 151:
return getAllDecoratorsOfMethod(member);
case 149:
return getAllDecoratorsOfProperty(member);
default:
return undefined;
}
}
function getAllDecoratorsOfAccessors(node, accessor) {
if (!accessor.body) {
return undefined;
}
var _a = ts.getAllAccessorDeclarations(node.members, accessor), firstAccessor = _a.firstAccessor, secondAccessor = _a.secondAccessor, setAccessor = _a.setAccessor;
var firstAccessorWithDecorators = firstAccessor.decorators ? firstAccessor : secondAccessor && secondAccessor.decorators ? secondAccessor : undefined;
if (!firstAccessorWithDecorators || accessor !== firstAccessorWithDecorators) {
return undefined;
}
var decorators = firstAccessorWithDecorators.decorators;
var parameters = getDecoratorsOfParameters(setAccessor);
if (!decorators && !parameters) {
return undefined;
}
return { decorators: decorators, parameters: parameters };
}
function getAllDecoratorsOfMethod(method) {
if (!method.body) {
return undefined;
}
var decorators = method.decorators;
var parameters = getDecoratorsOfParameters(method);
if (!decorators && !parameters) {
return undefined;
}
return { decorators: decorators, parameters: parameters };
}
function getAllDecoratorsOfProperty(property) {
var decorators = property.decorators;
if (!decorators) {
return undefined;
}
return { decorators: decorators };
}
function transformAllDecoratorsOfDeclaration(node, container, allDecorators) {
if (!allDecorators) {
return undefined;
}
var decoratorExpressions = [];
ts.addRange(decoratorExpressions, ts.map(allDecorators.decorators, transformDecorator));
ts.addRange(decoratorExpressions, ts.flatMap(allDecorators.parameters, transformDecoratorsOfParameter));
addTypeMetadata(node, container, decoratorExpressions);
return decoratorExpressions;
}
function addClassElementDecorationStatements(statements, node, isStatic) {
ts.addRange(statements, ts.map(generateClassElementDecorationExpressions(node, isStatic), expressionToStatement));
}
function generateClassElementDecorationExpressions(node, isStatic) {
var members = getDecoratedClassElements(node, isStatic);
var expressions;
for (var _i = 0, members_3 = members; _i < members_3.length; _i++) {
var member = members_3[_i];
var expression = generateClassElementDecorationExpression(node, member);
if (expression) {
if (!expressions) {
expressions = [expression];
}
else {
expressions.push(expression);
}
}
}
return expressions;
}
function generateClassElementDecorationExpression(node, member) {
var allDecorators = getAllDecoratorsOfClassElement(node, member);
var decoratorExpressions = transformAllDecoratorsOfDeclaration(member, node, allDecorators);
if (!decoratorExpressions) {
return undefined;
}
var prefix = getClassMemberPrefix(node, member);
var memberName = getExpressionForPropertyName(member, true);
var descriptor = languageVersion > 0
? member.kind === 149
? ts.createVoidZero()
: ts.createNull()
: undefined;
var helper = createDecorateHelper(context, decoratorExpressions, prefix, memberName, descriptor, ts.moveRangePastDecorators(member));
ts.setEmitFlags(helper, 1536);
return helper;
}
function addConstructorDecorationStatement(statements, node) {
var expression = generateConstructorDecorationExpression(node);
if (expression) {
statements.push(ts.setOriginalNode(ts.createStatement(expression), node));
}
}
function generateConstructorDecorationExpression(node) {
var allDecorators = getAllDecoratorsOfConstructor(node);
var decoratorExpressions = transformAllDecoratorsOfDeclaration(node, node, allDecorators);
if (!decoratorExpressions) {
return undefined;
}
var classAlias = classAliases && classAliases[ts.getOriginalNodeId(node)];
var localName = ts.getLocalName(node, false, true);
var decorate = createDecorateHelper(context, decoratorExpressions, localName);
var expression = ts.createAssignment(localName, classAlias ? ts.createAssignment(classAlias, decorate) : decorate);
ts.setEmitFlags(expression, 1536);
ts.setSourceMapRange(expression, ts.moveRangePastDecorators(node));
return expression;
}
function transformDecorator(decorator) {
return ts.visitNode(decorator.expression, visitor, ts.isExpression);
}
function transformDecoratorsOfParameter(decorators, parameterOffset) {
var expressions;
if (decorators) {
expressions = [];
for (var _i = 0, decorators_1 = decorators; _i < decorators_1.length; _i++) {
var decorator = decorators_1[_i];
var helper = createParamHelper(context, transformDecorator(decorator), parameterOffset, decorator.expression);
ts.setEmitFlags(helper, 1536);
expressions.push(helper);
}
}
return expressions;
}
function addTypeMetadata(node, container, decoratorExpressions) {
if (USE_NEW_TYPE_METADATA_FORMAT) {
addNewTypeMetadata(node, container, decoratorExpressions);
}
else {
addOldTypeMetadata(node, container, decoratorExpressions);
}
}
function addOldTypeMetadata(node, container, decoratorExpressions) {
if (compilerOptions.emitDecoratorMetadata) {
if (shouldAddTypeMetadata(node)) {
decoratorExpressions.push(createMetadataHelper(context, "design:type", serializeTypeOfNode(node)));
}
if (shouldAddParamTypesMetadata(node)) {
decoratorExpressions.push(createMetadataHelper(context, "design:paramtypes", serializeParameterTypesOfNode(node, container)));
}
if (shouldAddReturnTypeMetadata(node)) {
decoratorExpressions.push(createMetadataHelper(context, "design:returntype", serializeReturnTypeOfNode(node)));
}
}
}
function addNewTypeMetadata(node, container, decoratorExpressions) {
if (compilerOptions.emitDecoratorMetadata) {
var properties = void 0;
if (shouldAddTypeMetadata(node)) {
(properties || (properties = [])).push(ts.createPropertyAssignment("type", ts.createArrowFunction(undefined, undefined, [], undefined, ts.createToken(36), serializeTypeOfNode(node))));
}
if (shouldAddParamTypesMetadata(node)) {
(properties || (properties = [])).push(ts.createPropertyAssignment("paramTypes", ts.createArrowFunction(undefined, undefined, [], undefined, ts.createToken(36), serializeParameterTypesOfNode(node, container))));
}
if (shouldAddReturnTypeMetadata(node)) {
(properties || (properties = [])).push(ts.createPropertyAssignment("returnType", ts.createArrowFunction(undefined, undefined, [], undefined, ts.createToken(36), serializeReturnTypeOfNode(node))));
}
if (properties) {
decoratorExpressions.push(createMetadataHelper(context, "design:typeinfo", ts.createObjectLiteral(properties, true)));
}
}
}
function shouldAddTypeMetadata(node) {
var kind = node.kind;
return kind === 151
|| kind === 153
|| kind === 154
|| kind === 149;
}
function shouldAddReturnTypeMetadata(node) {
return node.kind === 151;
}
function shouldAddParamTypesMetadata(node) {
switch (node.kind) {
case 229:
case 199:
return ts.getFirstConstructorWithBody(node) !== undefined;
case 151:
case 153:
case 154:
return true;
}
return false;
}
function serializeTypeOfNode(node) {
switch (node.kind) {
case 149:
case 146:
case 153:
return serializeTypeNode(node.type);
case 154:
return serializeTypeNode(ts.getSetAccessorTypeAnnotationNode(node));
case 229:
case 199:
case 151:
return ts.createIdentifier("Function");
default:
return ts.createVoidZero();
}
}
function serializeParameterTypesOfNode(node, container) {
var valueDeclaration = ts.isClassLike(node)
? ts.getFirstConstructorWithBody(node)
: ts.isFunctionLike(node) && ts.nodeIsPresent(node.body)
? node
: undefined;
var expressions = [];
if (valueDeclaration) {
var parameters = getParametersOfDecoratedDeclaration(valueDeclaration, container);
var numParameters = parameters.length;
for (var i = 0; i < numParameters; i++) {
var parameter = parameters[i];
if (i === 0 && ts.isIdentifier(parameter.name) && parameter.name.escapedText === "this") {
continue;
}
if (parameter.dotDotDotToken) {
expressions.push(serializeTypeNode(ts.getRestParameterElementType(parameter.type)));
}
else {
expressions.push(serializeTypeOfNode(parameter));
}
}
}
return ts.createArrayLiteral(expressions);
}
function getParametersOfDecoratedDeclaration(node, container) {
if (container && node.kind === 153) {
var setAccessor = ts.getAllAccessorDeclarations(container.members, node).setAccessor;
if (setAccessor) {
return setAccessor.parameters;
}
}
return node.parameters;
}
function serializeReturnTypeOfNode(node) {
if (ts.isFunctionLike(node) && node.type) {
return serializeTypeNode(node.type);
}
else if (ts.isAsyncFunction(node)) {
return ts.createIdentifier("Promise");
}
return ts.createVoidZero();
}
function serializeTypeNode(node) {
if (node === undefined) {
return ts.createIdentifier("Object");
}
switch (node.kind) {
case 105:
case 139:
case 95:
case 130:
return ts.createVoidZero();
case 168:
return serializeTypeNode(node.type);
case 160:
case 161:
return ts.createIdentifier("Function");
case 164:
case 165:
return ts.createIdentifier("Array");
case 158:
case 122:
return ts.createIdentifier("Boolean");
case 136:
return ts.createIdentifier("String");
case 134:
return ts.createIdentifier("Object");
case 173:
switch (node.literal.kind) {
case 9:
return ts.createIdentifier("String");
case 8:
return ts.createIdentifier("Number");
case 101:
case 86:
return ts.createIdentifier("Boolean");
default:
ts.Debug.failBadSyntaxKind(node.literal);
break;
}
break;
case 133:
return ts.createIdentifier("Number");
case 137:
return languageVersion < 2
? getGlobalSymbolNameWithFallback()
: ts.createIdentifier("Symbol");
case 159:
return serializeTypeReferenceNode(node);
case 167:
case 166:
return serializeUnionOrIntersectionType(node);
case 162:
case 170:
case 171:
case 172:
case 163:
case 119:
case 169:
break;
default:
ts.Debug.failBadSyntaxKind(node);
break;
}
return ts.createIdentifier("Object");
}
function serializeUnionOrIntersectionType(node) {
var serializedUnion;
for (var _i = 0, _a = node.types; _i < _a.length; _i++) {
var typeNode = _a[_i];
while (typeNode.kind === 168) {
typeNode = typeNode.type;
}
if (typeNode.kind === 130) {
continue;
}
if (!strictNullChecks && (typeNode.kind === 95 || typeNode.kind === 139)) {
continue;
}
var serializedIndividual = serializeTypeNode(typeNode);
if (ts.isIdentifier(serializedIndividual) && serializedIndividual.escapedText === "Object") {
return serializedIndividual;
}
else if (serializedUnion) {
if (!ts.isIdentifier(serializedUnion) ||
!ts.isIdentifier(serializedIndividual) ||
serializedUnion.escapedText !== serializedIndividual.escapedText) {
return ts.createIdentifier("Object");
}
}
else {
serializedUnion = serializedIndividual;
}
}
return serializedUnion || ts.createVoidZero();
}
function serializeTypeReferenceNode(node) {
switch (resolver.getTypeReferenceSerializationKind(node.typeName, currentScope)) {
case ts.TypeReferenceSerializationKind.Unknown:
var serialized = serializeEntityNameAsExpression(node.typeName, true);
var temp = ts.createTempVariable(hoistVariableDeclaration);
return ts.createLogicalOr(ts.createLogicalAnd(ts.createTypeCheck(ts.createAssignment(temp, serialized), "function"), temp), ts.createIdentifier("Object"));
case ts.TypeReferenceSerializationKind.TypeWithConstructSignatureAndValue:
return serializeEntityNameAsExpression(node.typeName, false);
case ts.TypeReferenceSerializationKind.VoidNullableOrNeverType:
return ts.createVoidZero();
case ts.TypeReferenceSerializationKind.BooleanType:
return ts.createIdentifier("Boolean");
case ts.TypeReferenceSerializationKind.NumberLikeType:
return ts.createIdentifier("Number");
case ts.TypeReferenceSerializationKind.StringLikeType:
return ts.createIdentifier("String");
case ts.TypeReferenceSerializationKind.ArrayLikeType:
return ts.createIdentifier("Array");
case ts.TypeReferenceSerializationKind.ESSymbolType:
return languageVersion < 2
? getGlobalSymbolNameWithFallback()
: ts.createIdentifier("Symbol");
case ts.TypeReferenceSerializationKind.TypeWithCallSignature:
return ts.createIdentifier("Function");
case ts.TypeReferenceSerializationKind.Promise:
return ts.createIdentifier("Promise");
case ts.TypeReferenceSerializationKind.ObjectType:
default:
return ts.createIdentifier("Object");
}
}
function serializeEntityNameAsExpression(node, useFallback) {
switch (node.kind) {
case 71:
var name = ts.getMutableClone(node);
name.flags &= ~8;
name.original = undefined;
name.parent = ts.getParseTreeNode(currentScope);
if (useFallback) {
return ts.createLogicalAnd(ts.createStrictInequality(ts.createTypeOf(name), ts.createLiteral("undefined")), name);
}
return name;
case 143:
return serializeQualifiedNameAsExpression(node, useFallback);
}
}
function serializeQualifiedNameAsExpression(node, useFallback) {
var left;
if (node.left.kind === 71) {
left = serializeEntityNameAsExpression(node.left, useFallback);
}
else if (useFallback) {
var temp = ts.createTempVariable(hoistVariableDeclaration);
left = ts.createLogicalAnd(ts.createAssignment(temp, serializeEntityNameAsExpression(node.left, true)), temp);
}
else {
left = serializeEntityNameAsExpression(node.left, false);
}
return ts.createPropertyAccess(left, node.right);
}
function getGlobalSymbolNameWithFallback() {
return ts.createConditional(ts.createTypeCheck(ts.createIdentifier("Symbol"), "function"), ts.createIdentifier("Symbol"), ts.createIdentifier("Object"));
}
function getExpressionForPropertyName(member, generateNameForComputedPropertyName) {
var name = member.name;
if (ts.isComputedPropertyName(name)) {
return generateNameForComputedPropertyName
? ts.getGeneratedNameForNode(name)
: name.expression;
}
else if (ts.isIdentifier(name)) {
return ts.createLiteral(ts.idText(name));
}
else {
return ts.getSynthesizedClone(name);
}
}
function visitPropertyNameOfClassElement(member) {
var name = member.name;
if (ts.isComputedPropertyName(name)) {
var expression = ts.visitNode(name.expression, visitor, ts.isExpression);
if (member.decorators) {
var generatedName = ts.getGeneratedNameForNode(name);
hoistVariableDeclaration(generatedName);
expression = ts.createAssignment(generatedName, expression);
}
return ts.updateComputedPropertyName(name, expression);
}
else {
return name;
}
}
function visitHeritageClause(node) {
if (node.token === 85) {
var types = ts.visitNodes(node.types, visitor, ts.isExpressionWithTypeArguments, 0, 1);
return ts.setTextRange(ts.createHeritageClause(85, types), node);
}
return undefined;
}
function visitExpressionWithTypeArguments(node) {
return ts.updateExpressionWithTypeArguments(node, undefined, ts.visitNode(node.expression, visitor, ts.isLeftHandSideExpression));
}
function shouldEmitFunctionLikeDeclaration(node) {
return !ts.nodeIsMissing(node.body);
}
function visitConstructor(node) {
if (!shouldEmitFunctionLikeDeclaration(node)) {
return undefined;
}
return ts.updateConstructor(node, ts.visitNodes(node.decorators, visitor, ts.isDecorator), ts.visitNodes(node.modifiers, visitor, ts.isModifier), ts.visitParameterList(node.parameters, visitor, context), ts.visitFunctionBody(node.body, visitor, context));
}
function visitMethodDeclaration(node) {
if (!shouldEmitFunctionLikeDeclaration(node)) {
return undefined;
}
var updated = ts.updateMethod(node, undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.asteriskToken, visitPropertyNameOfClassElement(node), undefined, undefined, ts.visitParameterList(node.parameters, visitor, context), undefined, ts.visitFunctionBody(node.body, visitor, context));
if (updated !== node) {
ts.setCommentRange(updated, node);
ts.setSourceMapRange(updated, ts.moveRangePastDecorators(node));
}
return updated;
}
function shouldEmitAccessorDeclaration(node) {
return !(ts.nodeIsMissing(node.body) && ts.hasModifier(node, 128));
}
function visitGetAccessor(node) {
if (!shouldEmitAccessorDeclaration(node)) {
return undefined;
}
var updated = ts.updateGetAccessor(node, undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), visitPropertyNameOfClassElement(node), ts.visitParameterList(node.parameters, visitor, context), undefined, ts.visitFunctionBody(node.body, visitor, context) || ts.createBlock([]));
if (updated !== node) {
ts.setCommentRange(updated, node);
ts.setSourceMapRange(updated, ts.moveRangePastDecorators(node));
}
return updated;
}
function visitSetAccessor(node) {
if (!shouldEmitAccessorDeclaration(node)) {
return undefined;
}
var updated = ts.updateSetAccessor(node, undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), visitPropertyNameOfClassElement(node), ts.visitParameterList(node.parameters, visitor, context), ts.visitFunctionBody(node.body, visitor, context) || ts.createBlock([]));
if (updated !== node) {
ts.setCommentRange(updated, node);
ts.setSourceMapRange(updated, ts.moveRangePastDecorators(node));
}
return updated;
}
function visitFunctionDeclaration(node) {
if (!shouldEmitFunctionLikeDeclaration(node)) {
return ts.createNotEmittedStatement(node);
}
var updated = ts.updateFunctionDeclaration(node, undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.asteriskToken, node.name, undefined, ts.visitParameterList(node.parameters, visitor, context), undefined, ts.visitFunctionBody(node.body, visitor, context) || ts.createBlock([]));
if (isExportOfNamespace(node)) {
var statements = [updated];
addExportMemberAssignment(statements, node);
return statements;
}
return updated;
}
function visitFunctionExpression(node) {
if (!shouldEmitFunctionLikeDeclaration(node)) {
return ts.createOmittedExpression();
}
var updated = ts.updateFunctionExpression(node, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.asteriskToken, node.name, undefined, ts.visitParameterList(node.parameters, visitor, context), undefined, ts.visitFunctionBody(node.body, visitor, context) || ts.createBlock([]));
return updated;
}
function visitArrowFunction(node) {
var updated = ts.updateArrowFunction(node, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), undefined, ts.visitParameterList(node.parameters, visitor, context), undefined, node.equalsGreaterThanToken, ts.visitFunctionBody(node.body, visitor, context));
return updated;
}
function visitParameter(node) {
if (ts.parameterIsThisKeyword(node)) {
return undefined;
}
var parameter = ts.createParameter(undefined, undefined, node.dotDotDotToken, ts.visitNode(node.name, visitor, ts.isBindingName), undefined, undefined, ts.visitNode(node.initializer, visitor, ts.isExpression));
ts.setOriginalNode(parameter, node);
ts.setTextRange(parameter, ts.moveRangePastModifiers(node));
ts.setCommentRange(parameter, node);
ts.setSourceMapRange(parameter, ts.moveRangePastModifiers(node));
ts.setEmitFlags(parameter.name, 32);
return parameter;
}
function visitVariableStatement(node) {
if (isExportOfNamespace(node)) {
var variables = ts.getInitializedVariables(node.declarationList);
if (variables.length === 0) {
return undefined;
}
return ts.setTextRange(ts.createStatement(ts.inlineExpressions(ts.map(variables, transformInitializedVariable))), node);
}
else {
return ts.visitEachChild(node, visitor, context);
}
}
function transformInitializedVariable(node) {
var name = node.name;
if (ts.isBindingPattern(name)) {
return ts.flattenDestructuringAssignment(node, visitor, context, 0, false, createNamespaceExportExpression);
}
else {
return ts.setTextRange(ts.createAssignment(getNamespaceMemberNameWithSourceMapsAndWithoutComments(name), ts.visitNode(node.initializer, visitor, ts.isExpression)), node);
}
}
function visitVariableDeclaration(node) {
return ts.updateVariableDeclaration(node, ts.visitNode(node.name, visitor, ts.isBindingName), undefined, ts.visitNode(node.initializer, visitor, ts.isExpression));
}
function visitParenthesizedExpression(node) {
var innerExpression = ts.skipOuterExpressions(node.expression, ~2);
if (ts.isAssertionExpression(innerExpression)) {
var expression = ts.visitNode(node.expression, visitor, ts.isExpression);
return ts.createPartiallyEmittedExpression(expression, node);
}
return ts.visitEachChild(node, visitor, context);
}
function visitAssertionExpression(node) {
var expression = ts.visitNode(node.expression, visitor, ts.isExpression);
return ts.createPartiallyEmittedExpression(expression, node);
}
function visitNonNullExpression(node) {
var expression = ts.visitNode(node.expression, visitor, ts.isLeftHandSideExpression);
return ts.createPartiallyEmittedExpression(expression, node);
}
function visitCallExpression(node) {
return ts.updateCall(node, ts.visitNode(node.expression, visitor, ts.isExpression), undefined, ts.visitNodes(node.arguments, visitor, ts.isExpression));
}
function visitNewExpression(node) {
return ts.updateNew(node, ts.visitNode(node.expression, visitor, ts.isExpression), undefined, ts.visitNodes(node.arguments, visitor, ts.isExpression));
}
function shouldEmitEnumDeclaration(node) {
return !ts.isConst(node)
|| compilerOptions.preserveConstEnums
|| compilerOptions.isolatedModules;
}
function visitEnumDeclaration(node) {
if (!shouldEmitEnumDeclaration(node)) {
return undefined;
}
var statements = [];
var emitFlags = 2;
if (addVarForEnumOrModuleDeclaration(statements, node)) {
if (moduleKind !== ts.ModuleKind.System || currentScope !== currentSourceFile) {
emitFlags |= 512;
}
}
var parameterName = getNamespaceParameterName(node);
var containerName = getNamespaceContainerName(node);
var exportName = ts.hasModifier(node, 1)
? ts.getExternalModuleOrNamespaceExportName(currentNamespaceContainerName, node, false, true)
: ts.getLocalName(node, false, true);
var moduleArg = ts.createLogicalOr(exportName, ts.createAssignment(exportName, ts.createObjectLiteral()));
if (hasNamespaceQualifiedExportName(node)) {
var localName = ts.getLocalName(node, false, true);
moduleArg = ts.createAssignment(localName, moduleArg);
}
var enumStatement = ts.createStatement(ts.createCall(ts.createFunctionExpression(undefined, undefined, undefined, undefined, [ts.createParameter(undefined, undefined, undefined, parameterName)], undefined, transformEnumBody(node, containerName)), undefined, [moduleArg]));
ts.setOriginalNode(enumStatement, node);
ts.setTextRange(enumStatement, node);
ts.setEmitFlags(enumStatement, emitFlags);
statements.push(enumStatement);
statements.push(ts.createEndOfDeclarationMarker(node));
return statements;
}
function transformEnumBody(node, localName) {
var savedCurrentNamespaceLocalName = currentNamespaceContainerName;
currentNamespaceContainerName = localName;
var statements = [];
startLexicalEnvironment();
ts.addRange(statements, ts.map(node.members, transformEnumMember));
ts.addRange(statements, endLexicalEnvironment());
currentNamespaceContainerName = savedCurrentNamespaceLocalName;
return ts.createBlock(ts.setTextRange(ts.createNodeArray(statements), node.members), true);
}
function transformEnumMember(member) {
var name = getExpressionForPropertyName(member, false);
var valueExpression = transformEnumMemberDeclarationValue(member);
var innerAssignment = ts.createAssignment(ts.createElementAccess(currentNamespaceContainerName, name), valueExpression);
var outerAssignment = valueExpression.kind === 9 ?
innerAssignment :
ts.createAssignment(ts.createElementAccess(currentNamespaceContainerName, innerAssignment), name);
return ts.setTextRange(ts.createStatement(ts.setTextRange(outerAssignment, member)), member);
}
function transformEnumMemberDeclarationValue(member) {
var value = resolver.getConstantValue(member);
if (value !== undefined) {
return ts.createLiteral(value);
}
else {
enableSubstitutionForNonQualifiedEnumMembers();
if (member.initializer) {
return ts.visitNode(member.initializer, visitor, ts.isExpression);
}
else {
return ts.createVoidZero();
}
}
}
function shouldEmitModuleDeclaration(node) {
return ts.isInstantiatedModule(node, compilerOptions.preserveConstEnums || compilerOptions.isolatedModules);
}
function hasNamespaceQualifiedExportName(node) {
return isExportOfNamespace(node)
|| (isExternalModuleExport(node)
&& moduleKind !== ts.ModuleKind.ES2015
&& moduleKind !== ts.ModuleKind.ESNext
&& moduleKind !== ts.ModuleKind.System);
}
function recordEmittedDeclarationInScope(node) {
if (!currentScopeFirstDeclarationsOfName) {
currentScopeFirstDeclarationsOfName = ts.createUnderscoreEscapedMap();
}
var name = declaredNameInScope(node);
if (!currentScopeFirstDeclarationsOfName.has(name)) {
currentScopeFirstDeclarationsOfName.set(name, node);
}
}
function isFirstEmittedDeclarationInScope(node) {
if (currentScopeFirstDeclarationsOfName) {
var name = declaredNameInScope(node);
return currentScopeFirstDeclarationsOfName.get(name) === node;
}
return true;
}
function declaredNameInScope(node) {
ts.Debug.assertNode(node.name, ts.isIdentifier);
return node.name.escapedText;
}
function addVarForEnumOrModuleDeclaration(statements, node) {
var statement = ts.createVariableStatement(ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), ts.createVariableDeclarationList([
ts.createVariableDeclaration(ts.getLocalName(node, false, true))
], currentScope.kind === 265 ? 0 : 1));
ts.setOriginalNode(statement, node);
recordEmittedDeclarationInScope(node);
if (isFirstEmittedDeclarationInScope(node)) {
if (node.kind === 232) {
ts.setSourceMapRange(statement.declarationList, node);
}
else {
ts.setSourceMapRange(statement, node);
}
ts.setCommentRange(statement, node);
ts.setEmitFlags(statement, 1024 | 4194304);
statements.push(statement);
return true;
}
else {
var mergeMarker = ts.createMergeDeclarationMarker(statement);
ts.setEmitFlags(mergeMarker, 1536 | 4194304);
statements.push(mergeMarker);
return false;
}
}
function visitModuleDeclaration(node) {
if (!shouldEmitModuleDeclaration(node)) {
return ts.createNotEmittedStatement(node);
}
ts.Debug.assertNode(node.name, ts.isIdentifier, "A TypeScript namespace should have an Identifier name.");
enableSubstitutionForNamespaceExports();
var statements = [];
var emitFlags = 2;
if (addVarForEnumOrModuleDeclaration(statements, node)) {
if (moduleKind !== ts.ModuleKind.System || currentScope !== currentSourceFile) {
emitFlags |= 512;
}
}
var parameterName = getNamespaceParameterName(node);
var containerName = getNamespaceContainerName(node);
var exportName = ts.hasModifier(node, 1)
? ts.getExternalModuleOrNamespaceExportName(currentNamespaceContainerName, node, false, true)
: ts.getLocalName(node, false, true);
var moduleArg = ts.createLogicalOr(exportName, ts.createAssignment(exportName, ts.createObjectLiteral()));
if (hasNamespaceQualifiedExportName(node)) {
var localName = ts.getLocalName(node, false, true);
moduleArg = ts.createAssignment(localName, moduleArg);
}
var moduleStatement = ts.createStatement(ts.createCall(ts.createFunctionExpression(undefined, undefined, undefined, undefined, [ts.createParameter(undefined, undefined, undefined, parameterName)], undefined, transformModuleBody(node, containerName)), undefined, [moduleArg]));
ts.setOriginalNode(moduleStatement, node);
ts.setTextRange(moduleStatement, node);
ts.setEmitFlags(moduleStatement, emitFlags);
statements.push(moduleStatement);
statements.push(ts.createEndOfDeclarationMarker(node));
return statements;
}
function transformModuleBody(node, namespaceLocalName) {
var savedCurrentNamespaceContainerName = currentNamespaceContainerName;
var savedCurrentNamespace = currentNamespace;
var savedCurrentScopeFirstDeclarationsOfName = currentScopeFirstDeclarationsOfName;
currentNamespaceContainerName = namespaceLocalName;
currentNamespace = node;
currentScopeFirstDeclarationsOfName = undefined;
var statements = [];
startLexicalEnvironment();
var statementsLocation;
var blockLocation;
var body = node.body;
if (body.kind === 234) {
saveStateAndInvoke(body, function (body) { return ts.addRange(statements, ts.visitNodes(body.statements, namespaceElementVisitor, ts.isStatement)); });
statementsLocation = body.statements;
blockLocation = body;
}
else {
var result = visitModuleDeclaration(body);
if (result) {
if (ts.isArray(result)) {
ts.addRange(statements, result);
}
else {
statements.push(result);
}
}
var moduleBlock = getInnerMostModuleDeclarationFromDottedModule(node).body;
statementsLocation = ts.moveRangePos(moduleBlock.statements, -1);
}
ts.addRange(statements, endLexicalEnvironment());
currentNamespaceContainerName = savedCurrentNamespaceContainerName;
currentNamespace = savedCurrentNamespace;
currentScopeFirstDeclarationsOfName = savedCurrentScopeFirstDeclarationsOfName;
var block = ts.createBlock(ts.setTextRange(ts.createNodeArray(statements), statementsLocation), true);
ts.setTextRange(block, blockLocation);
if (body.kind !== 234) {
ts.setEmitFlags(block, ts.getEmitFlags(block) | 1536);
}
return block;
}
function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration) {
if (moduleDeclaration.body.kind === 233) {
var recursiveInnerModule = getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration.body);
return recursiveInnerModule || moduleDeclaration.body;
}
}
function visitImportDeclaration(node) {
if (!node.importClause) {
return node;
}
var importClause = ts.visitNode(node.importClause, visitImportClause, ts.isImportClause);
return importClause
? ts.updateImportDeclaration(node, undefined, undefined, importClause, node.moduleSpecifier)
: undefined;
}
function visitImportClause(node) {
var name = resolver.isReferencedAliasDeclaration(node) ? node.name : undefined;
var namedBindings = ts.visitNode(node.namedBindings, visitNamedImportBindings, ts.isNamedImportBindings);
return (name || namedBindings) ? ts.updateImportClause(node, name, namedBindings) : undefined;
}
function visitNamedImportBindings(node) {
if (node.kind === 240) {
return resolver.isReferencedAliasDeclaration(node) ? node : undefined;
}
else {
var elements = ts.visitNodes(node.elements, visitImportSpecifier, ts.isImportSpecifier);
return ts.some(elements) ? ts.updateNamedImports(node, elements) : undefined;
}
}
function visitImportSpecifier(node) {
return resolver.isReferencedAliasDeclaration(node) ? node : undefined;
}
function visitExportAssignment(node) {
return resolver.isValueAliasDeclaration(node)
? ts.visitEachChild(node, visitor, context)
: undefined;
}
function visitExportDeclaration(node) {
if (!node.exportClause) {
return compilerOptions.isolatedModules || resolver.moduleExportsSomeValue(node.moduleSpecifier) ? node : undefined;
}
if (!resolver.isValueAliasDeclaration(node)) {
return undefined;
}
var exportClause = ts.visitNode(node.exportClause, visitNamedExports, ts.isNamedExports);
return exportClause
? ts.updateExportDeclaration(node, undefined, undefined, exportClause, node.moduleSpecifier)
: undefined;
}
function visitNamedExports(node) {
var elements = ts.visitNodes(node.elements, visitExportSpecifier, ts.isExportSpecifier);
return ts.some(elements) ? ts.updateNamedExports(node, elements) : undefined;
}
function visitExportSpecifier(node) {
return resolver.isValueAliasDeclaration(node) ? node : undefined;
}
function shouldEmitImportEqualsDeclaration(node) {
return resolver.isReferencedAliasDeclaration(node)
|| (!ts.isExternalModule(currentSourceFile)
&& resolver.isTopLevelValueImportEqualsWithEntityName(node));
}
function visitImportEqualsDeclaration(node) {
if (ts.isExternalModuleImportEqualsDeclaration(node)) {
return resolver.isReferencedAliasDeclaration(node)
? ts.visitEachChild(node, visitor, context)
: undefined;
}
if (!shouldEmitImportEqualsDeclaration(node)) {
return undefined;
}
var moduleReference = ts.createExpressionFromEntityName(node.moduleReference);
ts.setEmitFlags(moduleReference, 1536 | 2048);
if (isNamedExternalModuleExport(node) || !isExportOfNamespace(node)) {
return ts.setOriginalNode(ts.setTextRange(ts.createVariableStatement(ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), ts.createVariableDeclarationList([
ts.setOriginalNode(ts.createVariableDeclaration(node.name, undefined, moduleReference), node)
])), node), node);
}
else {
return ts.setOriginalNode(createNamespaceExport(node.name, moduleReference, node), node);
}
}
function isExportOfNamespace(node) {
return currentNamespace !== undefined && ts.hasModifier(node, 1);
}
function isExternalModuleExport(node) {
return currentNamespace === undefined && ts.hasModifier(node, 1);
}
function isNamedExternalModuleExport(node) {
return isExternalModuleExport(node)
&& !ts.hasModifier(node, 512);
}
function isDefaultExternalModuleExport(node) {
return isExternalModuleExport(node)
&& ts.hasModifier(node, 512);
}
function expressionToStatement(expression) {
return ts.createStatement(expression);
}
function addExportMemberAssignment(statements, node) {
var expression = ts.createAssignment(ts.getExternalModuleOrNamespaceExportName(currentNamespaceContainerName, node, false, true), ts.getLocalName(node));
ts.setSourceMapRange(expression, ts.createRange(node.name ? node.name.pos : node.pos, node.end));
var statement = ts.createStatement(expression);
ts.setSourceMapRange(statement, ts.createRange(-1, node.end));
statements.push(statement);
}
function createNamespaceExport(exportName, exportValue, location) {
return ts.setTextRange(ts.createStatement(ts.createAssignment(ts.getNamespaceMemberName(currentNamespaceContainerName, exportName, false, true), exportValue)), location);
}
function createNamespaceExportExpression(exportName, exportValue, location) {
return ts.setTextRange(ts.createAssignment(getNamespaceMemberNameWithSourceMapsAndWithoutComments(exportName), exportValue), location);
}
function getNamespaceMemberNameWithSourceMapsAndWithoutComments(name) {
return ts.getNamespaceMemberName(currentNamespaceContainerName, name, false, true);
}
function getNamespaceParameterName(node) {
var name = ts.getGeneratedNameForNode(node);
ts.setSourceMapRange(name, node.name);
return name;
}
function getNamespaceContainerName(node) {
return ts.getGeneratedNameForNode(node);
}
function getClassAliasIfNeeded(node) {
if (resolver.getNodeCheckFlags(node) & 8388608) {
enableSubstitutionForClassAliases();
var classAlias = ts.createUniqueName(node.name && !ts.isGeneratedIdentifier(node.name) ? ts.idText(node.name) : "default");
classAliases[ts.getOriginalNodeId(node)] = classAlias;
hoistVariableDeclaration(classAlias);
return classAlias;
}
}
function getClassPrototype(node) {
return ts.createPropertyAccess(ts.getDeclarationName(node), "prototype");
}
function getClassMemberPrefix(node, member) {
return ts.hasModifier(member, 32)
? ts.getDeclarationName(node)
: getClassPrototype(node);
}
function enableSubstitutionForNonQualifiedEnumMembers() {
if ((enabledSubstitutions & 8) === 0) {
enabledSubstitutions |= 8;
context.enableSubstitution(71);
}
}
function enableSubstitutionForClassAliases() {
if ((enabledSubstitutions & 1) === 0) {
enabledSubstitutions |= 1;
context.enableSubstitution(71);
classAliases = [];
}
}
function enableSubstitutionForNamespaceExports() {
if ((enabledSubstitutions & 2) === 0) {
enabledSubstitutions |= 2;
context.enableSubstitution(71);
context.enableSubstitution(262);
context.enableEmitNotification(233);
}
}
function isTransformedModuleDeclaration(node) {
return ts.getOriginalNode(node).kind === 233;
}
function isTransformedEnumDeclaration(node) {
return ts.getOriginalNode(node).kind === 232;
}
function onEmitNode(hint, node, emitCallback) {
var savedApplicableSubstitutions = applicableSubstitutions;
var savedCurrentSourceFile = currentSourceFile;
if (ts.isSourceFile(node)) {
currentSourceFile = node;
}
if (enabledSubstitutions & 2 && isTransformedModuleDeclaration(node)) {
applicableSubstitutions |= 2;
}
if (enabledSubstitutions & 8 && isTransformedEnumDeclaration(node)) {
applicableSubstitutions |= 8;
}
previousOnEmitNode(hint, node, emitCallback);
applicableSubstitutions = savedApplicableSubstitutions;
currentSourceFile = savedCurrentSourceFile;
}
function onSubstituteNode(hint, node) {
node = previousOnSubstituteNode(hint, node);
if (hint === 1) {
return substituteExpression(node);
}
else if (ts.isShorthandPropertyAssignment(node)) {
return substituteShorthandPropertyAssignment(node);
}
return node;
}
function substituteShorthandPropertyAssignment(node) {
if (enabledSubstitutions & 2) {
var name = node.name;
var exportedName = trySubstituteNamespaceExportedName(name);
if (exportedName) {
if (node.objectAssignmentInitializer) {
var initializer = ts.createAssignment(exportedName, node.objectAssignmentInitializer);
return ts.setTextRange(ts.createPropertyAssignment(name, initializer), node);
}
return ts.setTextRange(ts.createPropertyAssignment(name, exportedName), node);
}
}
return node;
}
function substituteExpression(node) {
switch (node.kind) {
case 71:
return substituteExpressionIdentifier(node);
case 179:
return substitutePropertyAccessExpression(node);
case 180:
return substituteElementAccessExpression(node);
}
return node;
}
function substituteExpressionIdentifier(node) {
return trySubstituteClassAlias(node)
|| trySubstituteNamespaceExportedName(node)
|| node;
}
function trySubstituteClassAlias(node) {
if (enabledSubstitutions & 1) {
if (resolver.getNodeCheckFlags(node) & 16777216) {
var declaration = resolver.getReferencedValueDeclaration(node);
if (declaration) {
var classAlias = classAliases[declaration.id];
if (classAlias) {
var clone_1 = ts.getSynthesizedClone(classAlias);
ts.setSourceMapRange(clone_1, node);
ts.setCommentRange(clone_1, node);
return clone_1;
}
}
}
}
return undefined;
}
function trySubstituteNamespaceExportedName(node) {
if (enabledSubstitutions & applicableSubstitutions && !ts.isGeneratedIdentifier(node) && !ts.isLocalName(node)) {
var container = resolver.getReferencedExportContainer(node, false);
if (container && container.kind !== 265) {
var substitute = (applicableSubstitutions & 2 && container.kind === 233) ||
(applicableSubstitutions & 8 && container.kind === 232);
if (substitute) {
return ts.setTextRange(ts.createPropertyAccess(ts.getGeneratedNameForNode(container), node), node);
}
}
}
return undefined;
}
function substitutePropertyAccessExpression(node) {
return substituteConstantValue(node);
}
function substituteElementAccessExpression(node) {
return substituteConstantValue(node);
}
function substituteConstantValue(node) {
var constantValue = tryGetConstEnumValue(node);
if (constantValue !== undefined) {
ts.setConstantValue(node, constantValue);
var substitute = ts.createLiteral(constantValue);
if (!compilerOptions.removeComments) {
var propertyName = ts.isPropertyAccessExpression(node)
? ts.declarationNameToString(node.name)
: ts.getTextOfNode(node.argumentExpression);
ts.addSyntheticTrailingComment(substitute, 3, " " + propertyName + " ");
}
return substitute;
}
return node;
}
function tryGetConstEnumValue(node) {
if (compilerOptions.isolatedModules) {
return undefined;
}
return ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node)
? resolver.getConstantValue(node)
: undefined;
}
}
ts.transformTypeScript = transformTypeScript;
function createDecorateHelper(context, decoratorExpressions, target, memberName, descriptor, location) {
var argumentsArray = [];
argumentsArray.push(ts.createArrayLiteral(decoratorExpressions, true));
argumentsArray.push(target);
if (memberName) {
argumentsArray.push(memberName);
if (descriptor) {
argumentsArray.push(descriptor);
}
}
context.requestEmitHelper(decorateHelper);
return ts.setTextRange(ts.createCall(ts.getHelperName("__decorate"), undefined, argumentsArray), location);
}
var decorateHelper = {
name: "typescript:decorate",
scoped: false,
priority: 2,
text: "\n var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n };"
};
function createMetadataHelper(context, metadataKey, metadataValue) {
context.requestEmitHelper(metadataHelper);
return ts.createCall(ts.getHelperName("__metadata"), undefined, [
ts.createLiteral(metadataKey),
metadataValue
]);
}
var metadataHelper = {
name: "typescript:metadata",
scoped: false,
priority: 3,
text: "\n var __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n };"
};
function createParamHelper(context, expression, parameterOffset, location) {
context.requestEmitHelper(paramHelper);
return ts.setTextRange(ts.createCall(ts.getHelperName("__param"), undefined, [
ts.createLiteral(parameterOffset),
expression
]), location);
}
var paramHelper = {
name: "typescript:param",
scoped: false,
priority: 4,
text: "\n var __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n };"
};
})(ts || (ts = {}));
var ts;
(function (ts) {
function transformES2017(context) {
var startLexicalEnvironment = context.startLexicalEnvironment, resumeLexicalEnvironment = context.resumeLexicalEnvironment, endLexicalEnvironment = context.endLexicalEnvironment;
var resolver = context.getEmitResolver();
var compilerOptions = context.getCompilerOptions();
var languageVersion = ts.getEmitScriptTarget(compilerOptions);
var enabledSubstitutions;
var enclosingSuperContainerFlags = 0;
var previousOnEmitNode = context.onEmitNode;
var previousOnSubstituteNode = context.onSubstituteNode;
context.onEmitNode = onEmitNode;
context.onSubstituteNode = onSubstituteNode;
return transformSourceFile;
function transformSourceFile(node) {
if (node.isDeclarationFile) {
return node;
}
var visited = ts.visitEachChild(node, visitor, context);
ts.addEmitHelpers(visited, context.readEmitHelpers());
return visited;
}
function visitor(node) {
if ((node.transformFlags & 16) === 0) {
return node;
}
switch (node.kind) {
case 120:
return undefined;
case 191:
return visitAwaitExpression(node);
case 151:
return visitMethodDeclaration(node);
case 228:
return visitFunctionDeclaration(node);
case 186:
return visitFunctionExpression(node);
case 187:
return visitArrowFunction(node);
default:
return ts.visitEachChild(node, visitor, context);
}
}
function visitAwaitExpression(node) {
return ts.setOriginalNode(ts.setTextRange(ts.createYield(undefined, ts.visitNode(node.expression, visitor, ts.isExpression)), node), node);
}
function visitMethodDeclaration(node) {
return ts.updateMethod(node, undefined, ts.visitNodes(node.modifiers, visitor, ts.isModifier), node.asteriskToken, node.name, undefined, undefined, ts.visitParameterList(node.parameters, visitor, context), undefined, ts.getFunctionFlags(node) & 2
? transformAsyncFunctionBody(node)
: ts.visitFunctionBody(node.body, visitor, context));
}
function visitFunctionDeclaration(node) {
return ts.updateFunctionDeclaration(node, undefined, ts.visitNodes(node.modifiers, visitor, ts.isModifier), node.asteriskToken, node.name, undefined, ts.visitParameterList(node.parameters, visitor, context), undefined, ts.getFunctionFlags(node) & 2
? transformAsyncFunctionBody(node)
: ts.visitFunctionBody(node.body, visitor, context));
}
function visitFunctionExpression(node) {
return ts.updateFunctionExpression(node, ts.visitNodes(node.modifiers, visitor, ts.isModifier), node.asteriskToken, node.name, undefined, ts.visitParameterList(node.parameters, visitor, context), undefined, ts.getFunctionFlags(node) & 2
? transformAsyncFunctionBody(node)
: ts.visitFunctionBody(node.body, visitor, context));
}
function visitArrowFunction(node) {
return ts.updateArrowFunction(node, ts.visitNodes(node.modifiers, visitor, ts.isModifier), undefined, ts.visitParameterList(node.parameters, visitor, context), undefined, node.equalsGreaterThanToken, ts.getFunctionFlags(node) & 2
? transformAsyncFunctionBody(node)
: ts.visitFunctionBody(node.body, visitor, context));
}
function transformAsyncFunctionBody(node) {
resumeLexicalEnvironment();
var original = ts.getOriginalNode(node, ts.isFunctionLike);
var nodeType = original.type;
var promiseConstructor = languageVersion < 2 ? getPromiseConstructor(nodeType) : undefined;
var isArrowFunction = node.kind === 187;
var hasLexicalArguments = (resolver.getNodeCheckFlags(node) & 8192) !== 0;
if (!isArrowFunction) {
var statements = [];
var statementOffset = ts.addPrologue(statements, node.body.statements, false, visitor);
statements.push(ts.createReturn(createAwaiterHelper(context, hasLexicalArguments, promiseConstructor, transformFunctionBodyWorker(node.body, statementOffset))));
ts.addRange(statements, endLexicalEnvironment());
var block = ts.createBlock(statements, true);
ts.setTextRange(block, node.body);
if (languageVersion >= 2) {
if (resolver.getNodeCheckFlags(node) & 4096) {
enableSubstitutionForAsyncMethodsWithSuper();
ts.addEmitHelper(block, ts.advancedAsyncSuperHelper);
}
else if (resolver.getNodeCheckFlags(node) & 2048) {
enableSubstitutionForAsyncMethodsWithSuper();
ts.addEmitHelper(block, ts.asyncSuperHelper);
}
}
return block;
}
else {
var expression = createAwaiterHelper(context, hasLexicalArguments, promiseConstructor, transformFunctionBodyWorker(node.body));
var declarations = endLexicalEnvironment();
if (ts.some(declarations)) {
var block = ts.convertToFunctionBody(expression);
return ts.updateBlock(block, ts.setTextRange(ts.createNodeArray(ts.concatenate(block.statements, declarations)), block.statements));
}
return expression;
}
}
function transformFunctionBodyWorker(body, start) {
if (ts.isBlock(body)) {
return ts.updateBlock(body, ts.visitLexicalEnvironment(body.statements, visitor, context, start));
}
else {
startLexicalEnvironment();
var visited = ts.convertToFunctionBody(ts.visitNode(body, visitor, ts.isConciseBody));
var declarations = endLexicalEnvironment();
return ts.updateBlock(visited, ts.setTextRange(ts.createNodeArray(ts.concatenate(visited.statements, declarations)), visited.statements));
}
}
function getPromiseConstructor(type) {
var typeName = type && ts.getEntityNameFromTypeNode(type);
if (typeName && ts.isEntityName(typeName)) {
var serializationKind = resolver.getTypeReferenceSerializationKind(typeName);
if (serializationKind === ts.TypeReferenceSerializationKind.TypeWithConstructSignatureAndValue
|| serializationKind === ts.TypeReferenceSerializationKind.Unknown) {
return typeName;
}
}
return undefined;
}
function enableSubstitutionForAsyncMethodsWithSuper() {
if ((enabledSubstitutions & 1) === 0) {
enabledSubstitutions |= 1;
context.enableSubstitution(181);
context.enableSubstitution(179);
context.enableSubstitution(180);
context.enableEmitNotification(229);
context.enableEmitNotification(151);
context.enableEmitNotification(153);
context.enableEmitNotification(154);
context.enableEmitNotification(152);
}
}
function onEmitNode(hint, node, emitCallback) {
if (enabledSubstitutions & 1 && isSuperContainer(node)) {
var superContainerFlags = resolver.getNodeCheckFlags(node) & (2048 | 4096);
if (superContainerFlags !== enclosingSuperContainerFlags) {
var savedEnclosingSuperContainerFlags = enclosingSuperContainerFlags;
enclosingSuperContainerFlags = superContainerFlags;
previousOnEmitNode(hint, node, emitCallback);
enclosingSuperContainerFlags = savedEnclosingSuperContainerFlags;
return;
}
}
previousOnEmitNode(hint, node, emitCallback);
}
function onSubstituteNode(hint, node) {
node = previousOnSubstituteNode(hint, node);
if (hint === 1 && enclosingSuperContainerFlags) {
return substituteExpression(node);
}
return node;
}
function substituteExpression(node) {
switch (node.kind) {
case 179:
return substitutePropertyAccessExpression(node);
case 180:
return substituteElementAccessExpression(node);
case 181:
return substituteCallExpression(node);
}
return node;
}
function substitutePropertyAccessExpression(node) {
if (node.expression.kind === 97) {
return createSuperAccessInAsyncMethod(ts.createLiteral(ts.idText(node.name)), node);
}
return node;
}
function substituteElementAccessExpression(node) {
if (node.expression.kind === 97) {
return createSuperAccessInAsyncMethod(node.argumentExpression, node);
}
return node;
}
function substituteCallExpression(node) {
var expression = node.expression;
if (ts.isSuperProperty(expression)) {
var argumentExpression = ts.isPropertyAccessExpression(expression)
? substitutePropertyAccessExpression(expression)
: substituteElementAccessExpression(expression);
return ts.createCall(ts.createPropertyAccess(argumentExpression, "call"), undefined, [
ts.createThis()
].concat(node.arguments));
}
return node;
}
function isSuperContainer(node) {
var kind = node.kind;
return kind === 229
|| kind === 152
|| kind === 151
|| kind === 153
|| kind === 154;
}
function createSuperAccessInAsyncMethod(argumentExpression, location) {
if (enclosingSuperContainerFlags & 4096) {
return ts.setTextRange(ts.createPropertyAccess(ts.createCall(ts.createIdentifier("_super"), undefined, [argumentExpression]), "value"), location);
}
else {
return ts.setTextRange(ts.createCall(ts.createIdentifier("_super"), undefined, [argumentExpression]), location);
}
}
}
ts.transformES2017 = transformES2017;
var awaiterHelper = {
name: "typescript:awaiter",
scoped: false,
priority: 5,
text: "\n var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n };"
};
function createAwaiterHelper(context, hasLexicalArguments, promiseConstructor, body) {
context.requestEmitHelper(awaiterHelper);
var generatorFunc = ts.createFunctionExpression(undefined, ts.createToken(39), undefined, undefined, [], undefined, body);
(generatorFunc.emitNode || (generatorFunc.emitNode = {})).flags |= 262144 | 524288;
return ts.createCall(ts.getHelperName("__awaiter"), undefined, [
ts.createThis(),
hasLexicalArguments ? ts.createIdentifier("arguments") : ts.createVoidZero(),
promiseConstructor ? ts.createExpressionFromEntityName(promiseConstructor) : ts.createVoidZero(),
generatorFunc
]);
}
ts.asyncSuperHelper = {
name: "typescript:async-super",
scoped: true,
text: "\n const _super = name => super[name];\n "
};
ts.advancedAsyncSuperHelper = {
name: "typescript:advanced-async-super",
scoped: true,
text: "\n const _super = (function (geti, seti) {\n const cache = Object.create(null);\n return name => cache[name] || (cache[name] = { get value() { return geti(name); }, set value(v) { seti(name, v); } });\n })(name => super[name], (name, value) => super[name] = value);\n "
};
})(ts || (ts = {}));
var ts;
(function (ts) {
function transformESNext(context) {
var resumeLexicalEnvironment = context.resumeLexicalEnvironment, endLexicalEnvironment = context.endLexicalEnvironment, hoistVariableDeclaration = context.hoistVariableDeclaration;
var resolver = context.getEmitResolver();
var compilerOptions = context.getCompilerOptions();
var languageVersion = ts.getEmitScriptTarget(compilerOptions);
var previousOnEmitNode = context.onEmitNode;
context.onEmitNode = onEmitNode;
var previousOnSubstituteNode = context.onSubstituteNode;
context.onSubstituteNode = onSubstituteNode;
var enabledSubstitutions;
var enclosingFunctionFlags;
var enclosingSuperContainerFlags = 0;
return transformSourceFile;
function transformSourceFile(node) {
if (node.isDeclarationFile) {
return node;
}
var visited = ts.visitEachChild(node, visitor, context);
ts.addEmitHelpers(visited, context.readEmitHelpers());
return visited;
}
function visitor(node) {
return visitorWorker(node, false);
}
function visitorNoDestructuringValue(node) {
return visitorWorker(node, true);
}
function visitorNoAsyncModifier(node) {
if (node.kind === 120) {
return undefined;
}
return node;
}
function visitorWorker(node, noDestructuringValue) {
if ((node.transformFlags & 8) === 0) {
return node;
}
switch (node.kind) {
case 191:
return visitAwaitExpression(node);
case 197:
return visitYieldExpression(node);
case 222:
return visitLabeledStatement(node);
case 178:
return visitObjectLiteralExpression(node);
case 194:
return visitBinaryExpression(node, noDestructuringValue);
case 226:
return visitVariableDeclaration(node);
case 216:
return visitForOfStatement(node, undefined);
case 214:
return visitForStatement(node);
case 190:
return visitVoidExpression(node);
case 152:
return visitConstructorDeclaration(node);
case 151:
return visitMethodDeclaration(node);
case 153:
return visitGetAccessorDeclaration(node);
case 154:
return visitSetAccessorDeclaration(node);
case 228:
return visitFunctionDeclaration(node);
case 186:
return visitFunctionExpression(node);
case 187:
return visitArrowFunction(node);
case 146:
return visitParameter(node);
case 210:
return visitExpressionStatement(node);
case 185:
return visitParenthesizedExpression(node, noDestructuringValue);
case 260:
return visitCatchClause(node);
default:
return ts.visitEachChild(node, visitor, context);
}
}
function visitAwaitExpression(node) {
if (enclosingFunctionFlags & 2 && enclosingFunctionFlags & 1) {
return ts.setOriginalNode(ts.setTextRange(ts.createYield(createAwaitHelper(context, ts.visitNode(node.expression, visitor, ts.isExpression))), node), node);
}
return ts.visitEachChild(node, visitor, context);
}
function visitYieldExpression(node) {
if (enclosingFunctionFlags & 2 && enclosingFunctionFlags & 1 && node.asteriskToken) {
var expression = ts.visitNode(node.expression, visitor, ts.isExpression);
return ts.setOriginalNode(ts.setTextRange(ts.createYield(createAwaitHelper(context, ts.updateYield(node, node.asteriskToken, createAsyncDelegatorHelper(context, createAsyncValuesHelper(context, expression, expression), expression)))), node), node);
}
return ts.visitEachChild(node, visitor, context);
}
function visitLabeledStatement(node) {
if (enclosingFunctionFlags & 2 && enclosingFunctionFlags & 1) {
var statement = ts.unwrapInnermostStatementOfLabel(node);
if (statement.kind === 216 && statement.awaitModifier) {
return visitForOfStatement(statement, node);
}
return ts.restoreEnclosingLabel(ts.visitEachChild(node, visitor, context), node);
}
return ts.visitEachChild(node, visitor, context);
}
function chunkObjectLiteralElements(elements) {
var chunkObject;
var objects = [];
for (var _i = 0, elements_3 = elements; _i < elements_3.length; _i++) {
var e = elements_3[_i];
if (e.kind === 263) {
if (chunkObject) {
objects.push(ts.createObjectLiteral(chunkObject));
chunkObject = undefined;
}
var target = e.expression;
objects.push(ts.visitNode(target, visitor, ts.isExpression));
}
else {
if (!chunkObject) {
chunkObject = [];
}
if (e.kind === 261) {
var p = e;
chunkObject.push(ts.createPropertyAssignment(p.name, ts.visitNode(p.initializer, visitor, ts.isExpression)));
}
else {
chunkObject.push(ts.visitNode(e, visitor, ts.isObjectLiteralElementLike));
}
}
}
if (chunkObject) {
objects.push(ts.createObjectLiteral(chunkObject));
}
return objects;
}
function visitObjectLiteralExpression(node) {
if (node.transformFlags & 1048576) {
var objects = chunkObjectLiteralElements(node.properties);
if (objects.length && objects[0].kind !== 178) {
objects.unshift(ts.createObjectLiteral());
}
return createAssignHelper(context, objects);
}
return ts.visitEachChild(node, visitor, context);
}
function visitExpressionStatement(node) {
return ts.visitEachChild(node, visitorNoDestructuringValue, context);
}
function visitParenthesizedExpression(node, noDestructuringValue) {
return ts.visitEachChild(node, noDestructuringValue ? visitorNoDestructuringValue : visitor, context);
}
function visitCatchClause(node) {
if (!node.variableDeclaration) {
return ts.updateCatchClause(node, ts.createVariableDeclaration(ts.createTempVariable(undefined)), ts.visitNode(node.block, visitor, ts.isBlock));
}
return ts.visitEachChild(node, visitor, context);
}
function visitBinaryExpression(node, noDestructuringValue) {
if (ts.isDestructuringAssignment(node) && node.left.transformFlags & 1048576) {
return ts.flattenDestructuringAssignment(node, visitor, context, 1, !noDestructuringValue);
}
else if (node.operatorToken.kind === 26) {
return ts.updateBinary(node, ts.visitNode(node.left, visitorNoDestructuringValue, ts.isExpression), ts.visitNode(node.right, noDestructuringValue ? visitorNoDestructuringValue : visitor, ts.isExpression));
}
return ts.visitEachChild(node, visitor, context);
}
function visitVariableDeclaration(node) {
if (ts.isBindingPattern(node.name) && node.name.transformFlags & 1048576) {
return ts.flattenDestructuringBinding(node, visitor, context, 1);
}
return ts.visitEachChild(node, visitor, context);
}
function visitForStatement(node) {
return ts.updateFor(node, ts.visitNode(node.initializer, visitorNoDestructuringValue, ts.isForInitializer), ts.visitNode(node.condition, visitor, ts.isExpression), ts.visitNode(node.incrementor, visitor, ts.isExpression), ts.visitNode(node.statement, visitor, ts.isStatement));
}
function visitVoidExpression(node) {
return ts.visitEachChild(node, visitorNoDestructuringValue, context);
}
function visitForOfStatement(node, outermostLabeledStatement) {
if (node.initializer.transformFlags & 1048576) {
node = transformForOfStatementWithObjectRest(node);
}
if (node.awaitModifier) {
return transformForAwaitOfStatement(node, outermostLabeledStatement);
}
else {
return ts.restoreEnclosingLabel(ts.visitEachChild(node, visitor, context), outermostLabeledStatement);
}
}
function transformForOfStatementWithObjectRest(node) {
var initializerWithoutParens = ts.skipParentheses(node.initializer);
if (ts.isVariableDeclarationList(initializerWithoutParens) || ts.isAssignmentPattern(initializerWithoutParens)) {
var bodyLocation = void 0;
var statementsLocation = void 0;
var temp = ts.createTempVariable(undefined);
var statements = [ts.createForOfBindingStatement(initializerWithoutParens, temp)];
if (ts.isBlock(node.statement)) {
ts.addRange(statements, node.statement.statements);
bodyLocation = node.statement;
statementsLocation = node.statement.statements;
}
return ts.updateForOf(node, node.awaitModifier, ts.setTextRange(ts.createVariableDeclarationList([
ts.setTextRange(ts.createVariableDeclaration(temp), node.initializer)
], 1), node.initializer), node.expression, ts.setTextRange(ts.createBlock(ts.setTextRange(ts.createNodeArray(statements), statementsLocation), true), bodyLocation));
}
return node;
}
function convertForOfStatementHead(node, boundValue) {
var binding = ts.createForOfBindingStatement(node.initializer, boundValue);
var bodyLocation;
var statementsLocation;
var statements = [ts.visitNode(binding, visitor, ts.isStatement)];
var statement = ts.visitNode(node.statement, visitor, ts.isStatement);
if (ts.isBlock(statement)) {
ts.addRange(statements, statement.statements);
bodyLocation = statement;
statementsLocation = statement.statements;
}
else {
statements.push(statement);
}
return ts.setEmitFlags(ts.setTextRange(ts.createBlock(ts.setTextRange(ts.createNodeArray(statements), statementsLocation), true), bodyLocation), 48 | 384);
}
function createDownlevelAwait(expression) {
return enclosingFunctionFlags & 1
? ts.createYield(undefined, createAwaitHelper(context, expression))
: ts.createAwait(expression);
}
function transformForAwaitOfStatement(node, outermostLabeledStatement) {
var expression = ts.visitNode(node.expression, visitor, ts.isExpression);
var iterator = ts.isIdentifier(expression) ? ts.getGeneratedNameForNode(expression) : ts.createTempVariable(undefined);
var result = ts.isIdentifier(expression) ? ts.getGeneratedNameForNode(iterator) : ts.createTempVariable(undefined);
var errorRecord = ts.createUniqueName("e");
var catchVariable = ts.getGeneratedNameForNode(errorRecord);
var returnMethod = ts.createTempVariable(undefined);
var callValues = createAsyncValuesHelper(context, expression, node.expression);
var callNext = ts.createCall(ts.createPropertyAccess(iterator, "next"), undefined, []);
var getDone = ts.createPropertyAccess(result, "done");
var getValue = ts.createPropertyAccess(result, "value");
var callReturn = ts.createFunctionCall(returnMethod, iterator, []);
hoistVariableDeclaration(errorRecord);
hoistVariableDeclaration(returnMethod);
var forStatement = ts.setEmitFlags(ts.setTextRange(ts.createFor(ts.setEmitFlags(ts.setTextRange(ts.createVariableDeclarationList([
ts.setTextRange(ts.createVariableDeclaration(iterator, undefined, callValues), node.expression),
ts.createVariableDeclaration(result)
]), node.expression), 2097152), ts.createComma(ts.createAssignment(result, createDownlevelAwait(callNext)), ts.createLogicalNot(getDone)), undefined, convertForOfStatementHead(node, createDownlevelAwait(getValue))), node), 256);
return ts.createTry(ts.createBlock([
ts.restoreEnclosingLabel(forStatement, outermostLabeledStatement)
]), ts.createCatchClause(ts.createVariableDeclaration(catchVariable), ts.setEmitFlags(ts.createBlock([
ts.createStatement(ts.createAssignment(errorRecord, ts.createObjectLiteral([
ts.createPropertyAssignment("error", catchVariable)
])))
]), 1)), ts.createBlock([
ts.createTry(ts.createBlock([
ts.setEmitFlags(ts.createIf(ts.createLogicalAnd(ts.createLogicalAnd(result, ts.createLogicalNot(getDone)), ts.createAssignment(returnMethod, ts.createPropertyAccess(iterator, "return"))), ts.createStatement(createDownlevelAwait(callReturn))), 1)
]), undefined, ts.setEmitFlags(ts.createBlock([
ts.setEmitFlags(ts.createIf(errorRecord, ts.createThrow(ts.createPropertyAccess(errorRecord, "error"))), 1)
]), 1))
]));
}
function visitParameter(node) {
if (node.transformFlags & 1048576) {
return ts.updateParameter(node, undefined, undefined, node.dotDotDotToken, ts.getGeneratedNameForNode(node), undefined, undefined, ts.visitNode(node.initializer, visitor, ts.isExpression));
}
return ts.visitEachChild(node, visitor, context);
}
function visitConstructorDeclaration(node) {
var savedEnclosingFunctionFlags = enclosingFunctionFlags;
enclosingFunctionFlags = 0;
var updated = ts.updateConstructor(node, undefined, node.modifiers, ts.visitParameterList(node.parameters, visitor, context), transformFunctionBody(node));
enclosingFunctionFlags = savedEnclosingFunctionFlags;
return updated;
}
function visitGetAccessorDeclaration(node) {
var savedEnclosingFunctionFlags = enclosingFunctionFlags;
enclosingFunctionFlags = 0;
var updated = ts.updateGetAccessor(node, undefined, node.modifiers, ts.visitNode(node.name, visitor, ts.isPropertyName), ts.visitParameterList(node.parameters, visitor, context), undefined, transformFunctionBody(node));
enclosingFunctionFlags = savedEnclosingFunctionFlags;
return updated;
}
function visitSetAccessorDeclaration(node) {
var savedEnclosingFunctionFlags = enclosingFunctionFlags;
enclosingFunctionFlags = 0;
var updated = ts.updateSetAccessor(node, undefined, node.modifiers, ts.visitNode(node.name, visitor, ts.isPropertyName), ts.visitParameterList(node.parameters, visitor, context), transformFunctionBody(node));
enclosingFunctionFlags = savedEnclosingFunctionFlags;
return updated;
}
function visitMethodDeclaration(node) {
var savedEnclosingFunctionFlags = enclosingFunctionFlags;
enclosingFunctionFlags = ts.getFunctionFlags(node);
var updated = ts.updateMethod(node, undefined, enclosingFunctionFlags & 1
? ts.visitNodes(node.modifiers, visitorNoAsyncModifier, ts.isModifier)
: node.modifiers, enclosingFunctionFlags & 2
? undefined
: node.asteriskToken, ts.visitNode(node.name, visitor, ts.isPropertyName), ts.visitNode(undefined, visitor, ts.isToken), undefined, ts.visitParameterList(node.parameters, visitor, context), undefined, enclosingFunctionFlags & 2 && enclosingFunctionFlags & 1
? transformAsyncGeneratorFunctionBody(node)
: transformFunctionBody(node));
enclosingFunctionFlags = savedEnclosingFunctionFlags;
return updated;
}
function visitFunctionDeclaration(node) {
var savedEnclosingFunctionFlags = enclosingFunctionFlags;
enclosingFunctionFlags = ts.getFunctionFlags(node);
var updated = ts.updateFunctionDeclaration(node, undefined, enclosingFunctionFlags & 1
? ts.visitNodes(node.modifiers, visitorNoAsyncModifier, ts.isModifier)
: node.modifiers, enclosingFunctionFlags & 2
? undefined
: node.asteriskToken, node.name, undefined, ts.visitParameterList(node.parameters, visitor, context), undefined, enclosingFunctionFlags & 2 && enclosingFunctionFlags & 1
? transformAsyncGeneratorFunctionBody(node)
: transformFunctionBody(node));
enclosingFunctionFlags = savedEnclosingFunctionFlags;
return updated;
}
function visitArrowFunction(node) {
var savedEnclosingFunctionFlags = enclosingFunctionFlags;
enclosingFunctionFlags = ts.getFunctionFlags(node);
var updated = ts.updateArrowFunction(node, node.modifiers, undefined, ts.visitParameterList(node.parameters, visitor, context), undefined, node.equalsGreaterThanToken, transformFunctionBody(node));
enclosingFunctionFlags = savedEnclosingFunctionFlags;
return updated;
}
function visitFunctionExpression(node) {
var savedEnclosingFunctionFlags = enclosingFunctionFlags;
enclosingFunctionFlags = ts.getFunctionFlags(node);
var updated = ts.updateFunctionExpression(node, enclosingFunctionFlags & 1
? ts.visitNodes(node.modifiers, visitorNoAsyncModifier, ts.isModifier)
: node.modifiers, enclosingFunctionFlags & 2
? undefined
: node.asteriskToken, node.name, undefined, ts.visitParameterList(node.parameters, visitor, context), undefined, enclosingFunctionFlags & 2 && enclosingFunctionFlags & 1
? transformAsyncGeneratorFunctionBody(node)
: transformFunctionBody(node));
enclosingFunctionFlags = savedEnclosingFunctionFlags;
return updated;
}
function transformAsyncGeneratorFunctionBody(node) {
resumeLexicalEnvironment();
var statements = [];
var statementOffset = ts.addPrologue(statements, node.body.statements, false, visitor);
appendObjectRestAssignmentsIfNeeded(statements, node);
statements.push(ts.createReturn(createAsyncGeneratorHelper(context, ts.createFunctionExpression(undefined, ts.createToken(39), node.name && ts.getGeneratedNameForNode(node.name), undefined, [], undefined, ts.updateBlock(node.body, ts.visitLexicalEnvironment(node.body.statements, visitor, context, statementOffset))))));
ts.addRange(statements, endLexicalEnvironment());
var block = ts.updateBlock(node.body, statements);
if (languageVersion >= 2) {
if (resolver.getNodeCheckFlags(node) & 4096) {
enableSubstitutionForAsyncMethodsWithSuper();
ts.addEmitHelper(block, ts.advancedAsyncSuperHelper);
}
else if (resolver.getNodeCheckFlags(node) & 2048) {
enableSubstitutionForAsyncMethodsWithSuper();
ts.addEmitHelper(block, ts.asyncSuperHelper);
}
}
return block;
}
function transformFunctionBody(node) {
resumeLexicalEnvironment();
var statementOffset = 0;
var statements = [];
var body = ts.visitNode(node.body, visitor, ts.isConciseBody);
if (ts.isBlock(body)) {
statementOffset = ts.addPrologue(statements, body.statements, false, visitor);
}
ts.addRange(statements, appendObjectRestAssignmentsIfNeeded(undefined, node));
var trailingStatements = endLexicalEnvironment();
if (statementOffset > 0 || ts.some(statements) || ts.some(trailingStatements)) {
var block = ts.convertToFunctionBody(body, true);
ts.addRange(statements, block.statements.slice(statementOffset));
ts.addRange(statements, trailingStatements);
return ts.updateBlock(block, ts.setTextRange(ts.createNodeArray(statements), block.statements));
}
return body;
}
function appendObjectRestAssignmentsIfNeeded(statements, node) {
for (var _i = 0, _a = node.parameters; _i < _a.length; _i++) {
var parameter = _a[_i];
if (parameter.transformFlags & 1048576) {
var temp = ts.getGeneratedNameForNode(parameter);
var declarations = ts.flattenDestructuringBinding(parameter, visitor, context, 1, temp, false, true);
if (ts.some(declarations)) {
var statement = ts.createVariableStatement(undefined, ts.createVariableDeclarationList(declarations));
ts.setEmitFlags(statement, 1048576);
statements = ts.append(statements, statement);
}
}
}
return statements;
}
function enableSubstitutionForAsyncMethodsWithSuper() {
if ((enabledSubstitutions & 1) === 0) {
enabledSubstitutions |= 1;
context.enableSubstitution(181);
context.enableSubstitution(179);
context.enableSubstitution(180);
context.enableEmitNotification(229);
context.enableEmitNotification(151);
context.enableEmitNotification(153);
context.enableEmitNotification(154);
context.enableEmitNotification(152);
}
}
function onEmitNode(hint, node, emitCallback) {
if (enabledSubstitutions & 1 && isSuperContainer(node)) {
var superContainerFlags = resolver.getNodeCheckFlags(node) & (2048 | 4096);
if (superContainerFlags !== enclosingSuperContainerFlags) {
var savedEnclosingSuperContainerFlags = enclosingSuperContainerFlags;
enclosingSuperContainerFlags = superContainerFlags;
previousOnEmitNode(hint, node, emitCallback);
enclosingSuperContainerFlags = savedEnclosingSuperContainerFlags;
return;
}
}
previousOnEmitNode(hint, node, emitCallback);
}
function onSubstituteNode(hint, node) {
node = previousOnSubstituteNode(hint, node);
if (hint === 1 && enclosingSuperContainerFlags) {
return substituteExpression(node);
}
return node;
}
function substituteExpression(node) {
switch (node.kind) {
case 179:
return substitutePropertyAccessExpression(node);
case 180:
return substituteElementAccessExpression(node);
case 181:
return substituteCallExpression(node);
}
return node;
}
function substitutePropertyAccessExpression(node) {
if (node.expression.kind === 97) {
return createSuperAccessInAsyncMethod(ts.createLiteral(ts.idText(node.name)), node);
}
return node;
}
function substituteElementAccessExpression(node) {
if (node.expression.kind === 97) {
return createSuperAccessInAsyncMethod(node.argumentExpression, node);
}
return node;
}
function substituteCallExpression(node) {
var expression = node.expression;
if (ts.isSuperProperty(expression)) {
var argumentExpression = ts.isPropertyAccessExpression(expression)
? substitutePropertyAccessExpression(expression)
: substituteElementAccessExpression(expression);
return ts.createCall(ts.createPropertyAccess(argumentExpression, "call"), undefined, [
ts.createThis()
].concat(node.arguments));
}
return node;
}
function isSuperContainer(node) {
var kind = node.kind;
return kind === 229
|| kind === 152
|| kind === 151
|| kind === 153
|| kind === 154;
}
function createSuperAccessInAsyncMethod(argumentExpression, location) {
if (enclosingSuperContainerFlags & 4096) {
return ts.setTextRange(ts.createPropertyAccess(ts.createCall(ts.createIdentifier("_super"), undefined, [argumentExpression]), "value"), location);
}
else {
return ts.setTextRange(ts.createCall(ts.createIdentifier("_super"), undefined, [argumentExpression]), location);
}
}
}
ts.transformESNext = transformESNext;
var assignHelper = {
name: "typescript:assign",
scoped: false,
priority: 1,
text: "\n var __assign = (this && this.__assign) || Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };"
};
function createAssignHelper(context, attributesSegments) {
if (context.getCompilerOptions().target >= 2) {
return ts.createCall(ts.createPropertyAccess(ts.createIdentifier("Object"), "assign"), undefined, attributesSegments);
}
context.requestEmitHelper(assignHelper);
return ts.createCall(ts.getHelperName("__assign"), undefined, attributesSegments);
}
ts.createAssignHelper = createAssignHelper;
var awaitHelper = {
name: "typescript:await",
scoped: false,
text: "\n var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }\n "
};
function createAwaitHelper(context, expression) {
context.requestEmitHelper(awaitHelper);
return ts.createCall(ts.getHelperName("__await"), undefined, [expression]);
}
var asyncGeneratorHelper = {
name: "typescript:asyncGenerator",
scoped: false,
text: "\n var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n };\n "
};
function createAsyncGeneratorHelper(context, generatorFunc) {
context.requestEmitHelper(awaitHelper);
context.requestEmitHelper(asyncGeneratorHelper);
(generatorFunc.emitNode || (generatorFunc.emitNode = {})).flags |= 262144;
return ts.createCall(ts.getHelperName("__asyncGenerator"), undefined, [
ts.createThis(),
ts.createIdentifier("arguments"),
generatorFunc
]);
}
var asyncDelegator = {
name: "typescript:asyncDelegator",
scoped: false,
text: "\n var __asyncDelegator = (this && this.__asyncDelegator) || function (o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; }; }\n };\n "
};
function createAsyncDelegatorHelper(context, expression, location) {
context.requestEmitHelper(awaitHelper);
context.requestEmitHelper(asyncDelegator);
return ts.setTextRange(ts.createCall(ts.getHelperName("__asyncDelegator"), undefined, [expression]), location);
}
var asyncValues = {
name: "typescript:asyncValues",
scoped: false,
text: "\n var __asyncValues = (this && this.__asyncIterator) || function (o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator];\n return m ? m.call(o) : typeof __values === \"function\" ? __values(o) : o[Symbol.iterator]();\n };\n "
};
function createAsyncValuesHelper(context, expression, location) {
context.requestEmitHelper(asyncValues);
return ts.setTextRange(ts.createCall(ts.getHelperName("__asyncValues"), undefined, [expression]), location);
}
})(ts || (ts = {}));
var ts;
(function (ts) {
function transformJsx(context) {
var compilerOptions = context.getCompilerOptions();
return transformSourceFile;
function transformSourceFile(node) {
if (node.isDeclarationFile) {
return node;
}
var visited = ts.visitEachChild(node, visitor, context);
ts.addEmitHelpers(visited, context.readEmitHelpers());
return visited;
}
function visitor(node) {
if (node.transformFlags & 4) {
return visitorWorker(node);
}
else {
return node;
}
}
function visitorWorker(node) {
switch (node.kind) {
case 249:
return visitJsxElement(node, false);
case 250:
return visitJsxSelfClosingElement(node, false);
case 256:
return visitJsxExpression(node);
default:
return ts.visitEachChild(node, visitor, context);
}
}
function transformJsxChildToExpression(node) {
switch (node.kind) {
case 10:
return visitJsxText(node);
case 256:
return visitJsxExpression(node);
case 249:
return visitJsxElement(node, true);
case 250:
return visitJsxSelfClosingElement(node, true);
default:
ts.Debug.failBadSyntaxKind(node);
return undefined;
}
}
function visitJsxElement(node, isChild) {
return visitJsxOpeningLikeElement(node.openingElement, node.children, isChild, node);
}
function visitJsxSelfClosingElement(node, isChild) {
return visitJsxOpeningLikeElement(node, undefined, isChild, node);
}
function visitJsxOpeningLikeElement(node, children, isChild, location) {
var tagName = getTagName(node);
var objectProperties;
var attrs = node.attributes.properties;
if (attrs.length === 0) {
objectProperties = ts.createNull();
}
else {
var segments = ts.flatten(ts.spanMap(attrs, ts.isJsxSpreadAttribute, function (attrs, isSpread) { return isSpread
? ts.map(attrs, transformJsxSpreadAttributeToExpression)
: ts.createObjectLiteral(ts.map(attrs, transformJsxAttributeToObjectLiteralElement)); }));
if (ts.isJsxSpreadAttribute(attrs[0])) {
segments.unshift(ts.createObjectLiteral());
}
objectProperties = ts.singleOrUndefined(segments);
if (!objectProperties) {
objectProperties = ts.createAssignHelper(context, segments);
}
}
var element = ts.createExpressionForJsxElement(context.getEmitResolver().getJsxFactoryEntity(), compilerOptions.reactNamespace, tagName, objectProperties, ts.mapDefined(children, transformJsxChildToExpression), node, location);
if (isChild) {
ts.startOnNewLine(element);
}
return element;
}
function transformJsxSpreadAttributeToExpression(node) {
return ts.visitNode(node.expression, visitor, ts.isExpression);
}
function transformJsxAttributeToObjectLiteralElement(node) {
var name = getAttributeName(node);
var expression = transformJsxAttributeInitializer(node.initializer);
return ts.createPropertyAssignment(name, expression);
}
function transformJsxAttributeInitializer(node) {
if (node === undefined) {
return ts.createTrue();
}
else if (node.kind === 9) {
var decoded = tryDecodeEntities(node.text);
return decoded ? ts.setTextRange(ts.createLiteral(decoded), node) : node;
}
else if (node.kind === 256) {
if (node.expression === undefined) {
return ts.createTrue();
}
return visitJsxExpression(node);
}
else {
ts.Debug.failBadSyntaxKind(node);
}
}
function visitJsxText(node) {
var fixed = fixupWhitespaceAndDecodeEntities(ts.getTextOfNode(node, true));
return fixed === undefined ? undefined : ts.createLiteral(fixed);
}
function fixupWhitespaceAndDecodeEntities(text) {
var acc;
var firstNonWhitespace = 0;
var lastNonWhitespace = -1;
for (var i = 0; i < text.length; i++) {
var c = text.charCodeAt(i);
if (ts.isLineBreak(c)) {
if (firstNonWhitespace !== -1 && lastNonWhitespace !== -1) {
acc = addLineOfJsxText(acc, text.substr(firstNonWhitespace, lastNonWhitespace - firstNonWhitespace + 1));
}
firstNonWhitespace = -1;
}
else if (!ts.isWhiteSpaceSingleLine(c)) {
lastNonWhitespace = i;
if (firstNonWhitespace === -1) {
firstNonWhitespace = i;
}
}
}
return firstNonWhitespace !== -1
? addLineOfJsxText(acc, text.substr(firstNonWhitespace))
: acc;
}
function addLineOfJsxText(acc, trimmedLine) {
var decoded = decodeEntities(trimmedLine);
return acc === undefined ? decoded : acc + " " + decoded;
}
function decodeEntities(text) {
return text.replace(/&((#((\d+)|x([\da-fA-F]+)))|(\w+));/g, function (match, _all, _number, _digits, decimal, hex, word) {
if (decimal) {
return String.fromCharCode(parseInt(decimal, 10));
}
else if (hex) {
return String.fromCharCode(parseInt(hex, 16));
}
else {
var ch = entities.get(word);
return ch ? String.fromCharCode(ch) : match;
}
});
}
function tryDecodeEntities(text) {
var decoded = decodeEntities(text);
return decoded === text ? undefined : decoded;
}
function getTagName(node) {
if (node.kind === 249) {
return getTagName(node.openingElement);
}
else {
var name = node.tagName;
if (ts.isIdentifier(name) && ts.isIntrinsicJsxName(name.escapedText)) {
return ts.createLiteral(ts.idText(name));
}
else {
return ts.createExpressionFromEntityName(name);
}
}
}
function getAttributeName(node) {
var name = node.name;
var text = ts.idText(name);
if (/^[A-Za-z_]\w*$/.test(text)) {
return name;
}
else {
return ts.createLiteral(text);
}
}
function visitJsxExpression(node) {
return ts.visitNode(node.expression, visitor, ts.isExpression);
}
}
ts.transformJsx = transformJsx;
var entities = ts.createMapFromTemplate({
"quot": 0x0022,
"amp": 0x0026,
"apos": 0x0027,
"lt": 0x003C,
"gt": 0x003E,
"nbsp": 0x00A0,
"iexcl": 0x00A1,
"cent": 0x00A2,
"pound": 0x00A3,
"curren": 0x00A4,
"yen": 0x00A5,
"brvbar": 0x00A6,
"sect": 0x00A7,
"uml": 0x00A8,
"copy": 0x00A9,
"ordf": 0x00AA,
"laquo": 0x00AB,
"not": 0x00AC,
"shy": 0x00AD,
"reg": 0x00AE,
"macr": 0x00AF,
"deg": 0x00B0,
"plusmn": 0x00B1,
"sup2": 0x00B2,
"sup3": 0x00B3,
"acute": 0x00B4,
"micro": 0x00B5,
"para": 0x00B6,
"middot": 0x00B7,
"cedil": 0x00B8,
"sup1": 0x00B9,
"ordm": 0x00BA,
"raquo": 0x00BB,
"frac14": 0x00BC,
"frac12": 0x00BD,
"frac34": 0x00BE,
"iquest": 0x00BF,
"Agrave": 0x00C0,
"Aacute": 0x00C1,
"Acirc": 0x00C2,
"Atilde": 0x00C3,
"Auml": 0x00C4,
"Aring": 0x00C5,
"AElig": 0x00C6,
"Ccedil": 0x00C7,
"Egrave": 0x00C8,
"Eacute": 0x00C9,
"Ecirc": 0x00CA,
"Euml": 0x00CB,
"Igrave": 0x00CC,
"Iacute": 0x00CD,
"Icirc": 0x00CE,
"Iuml": 0x00CF,
"ETH": 0x00D0,
"Ntilde": 0x00D1,
"Ograve": 0x00D2,
"Oacute": 0x00D3,
"Ocirc": 0x00D4,
"Otilde": 0x00D5,
"Ouml": 0x00D6,
"times": 0x00D7,
"Oslash": 0x00D8,
"Ugrave": 0x00D9,
"Uacute": 0x00DA,
"Ucirc": 0x00DB,
"Uuml": 0x00DC,
"Yacute": 0x00DD,
"THORN": 0x00DE,
"szlig": 0x00DF,
"agrave": 0x00E0,
"aacute": 0x00E1,
"acirc": 0x00E2,
"atilde": 0x00E3,
"auml": 0x00E4,
"aring": 0x00E5,
"aelig": 0x00E6,
"ccedil": 0x00E7,
"egrave": 0x00E8,
"eacute": 0x00E9,
"ecirc": 0x00EA,
"euml": 0x00EB,
"igrave": 0x00EC,
"iacute": 0x00ED,
"icirc": 0x00EE,
"iuml": 0x00EF,
"eth": 0x00F0,
"ntilde": 0x00F1,
"ograve": 0x00F2,
"oacute": 0x00F3,
"ocirc": 0x00F4,
"otilde": 0x00F5,
"ouml": 0x00F6,
"divide": 0x00F7,
"oslash": 0x00F8,
"ugrave": 0x00F9,
"uacute": 0x00FA,
"ucirc": 0x00FB,
"uuml": 0x00FC,
"yacute": 0x00FD,
"thorn": 0x00FE,
"yuml": 0x00FF,
"OElig": 0x0152,
"oelig": 0x0153,
"Scaron": 0x0160,
"scaron": 0x0161,
"Yuml": 0x0178,
"fnof": 0x0192,
"circ": 0x02C6,
"tilde": 0x02DC,
"Alpha": 0x0391,
"Beta": 0x0392,
"Gamma": 0x0393,
"Delta": 0x0394,
"Epsilon": 0x0395,
"Zeta": 0x0396,
"Eta": 0x0397,
"Theta": 0x0398,
"Iota": 0x0399,
"Kappa": 0x039A,
"Lambda": 0x039B,
"Mu": 0x039C,
"Nu": 0x039D,
"Xi": 0x039E,
"Omicron": 0x039F,
"Pi": 0x03A0,
"Rho": 0x03A1,
"Sigma": 0x03A3,
"Tau": 0x03A4,
"Upsilon": 0x03A5,
"Phi": 0x03A6,
"Chi": 0x03A7,
"Psi": 0x03A8,
"Omega": 0x03A9,
"alpha": 0x03B1,
"beta": 0x03B2,
"gamma": 0x03B3,
"delta": 0x03B4,
"epsilon": 0x03B5,
"zeta": 0x03B6,
"eta": 0x03B7,
"theta": 0x03B8,
"iota": 0x03B9,
"kappa": 0x03BA,
"lambda": 0x03BB,
"mu": 0x03BC,
"nu": 0x03BD,
"xi": 0x03BE,
"omicron": 0x03BF,
"pi": 0x03C0,
"rho": 0x03C1,
"sigmaf": 0x03C2,
"sigma": 0x03C3,
"tau": 0x03C4,
"upsilon": 0x03C5,
"phi": 0x03C6,
"chi": 0x03C7,
"psi": 0x03C8,
"omega": 0x03C9,
"thetasym": 0x03D1,
"upsih": 0x03D2,
"piv": 0x03D6,
"ensp": 0x2002,
"emsp": 0x2003,
"thinsp": 0x2009,
"zwnj": 0x200C,
"zwj": 0x200D,
"lrm": 0x200E,
"rlm": 0x200F,
"ndash": 0x2013,
"mdash": 0x2014,
"lsquo": 0x2018,
"rsquo": 0x2019,
"sbquo": 0x201A,
"ldquo": 0x201C,
"rdquo": 0x201D,
"bdquo": 0x201E,
"dagger": 0x2020,
"Dagger": 0x2021,
"bull": 0x2022,
"hellip": 0x2026,
"permil": 0x2030,
"prime": 0x2032,
"Prime": 0x2033,
"lsaquo": 0x2039,
"rsaquo": 0x203A,
"oline": 0x203E,
"frasl": 0x2044,
"euro": 0x20AC,
"image": 0x2111,
"weierp": 0x2118,
"real": 0x211C,
"trade": 0x2122,
"alefsym": 0x2135,
"larr": 0x2190,
"uarr": 0x2191,
"rarr": 0x2192,
"darr": 0x2193,
"harr": 0x2194,
"crarr": 0x21B5,
"lArr": 0x21D0,
"uArr": 0x21D1,
"rArr": 0x21D2,
"dArr": 0x21D3,
"hArr": 0x21D4,
"forall": 0x2200,
"part": 0x2202,
"exist": 0x2203,
"empty": 0x2205,
"nabla": 0x2207,
"isin": 0x2208,
"notin": 0x2209,
"ni": 0x220B,
"prod": 0x220F,
"sum": 0x2211,
"minus": 0x2212,
"lowast": 0x2217,
"radic": 0x221A,
"prop": 0x221D,
"infin": 0x221E,
"ang": 0x2220,
"and": 0x2227,
"or": 0x2228,
"cap": 0x2229,
"cup": 0x222A,
"int": 0x222B,
"there4": 0x2234,
"sim": 0x223C,
"cong": 0x2245,
"asymp": 0x2248,
"ne": 0x2260,
"equiv": 0x2261,
"le": 0x2264,
"ge": 0x2265,
"sub": 0x2282,
"sup": 0x2283,
"nsub": 0x2284,
"sube": 0x2286,
"supe": 0x2287,
"oplus": 0x2295,
"otimes": 0x2297,
"perp": 0x22A5,
"sdot": 0x22C5,
"lceil": 0x2308,
"rceil": 0x2309,
"lfloor": 0x230A,
"rfloor": 0x230B,
"lang": 0x2329,
"rang": 0x232A,
"loz": 0x25CA,
"spades": 0x2660,
"clubs": 0x2663,
"hearts": 0x2665,
"diams": 0x2666
});
})(ts || (ts = {}));
var ts;
(function (ts) {
function transformES2016(context) {
var hoistVariableDeclaration = context.hoistVariableDeclaration;
return transformSourceFile;
function transformSourceFile(node) {
if (node.isDeclarationFile) {
return node;
}
return ts.visitEachChild(node, visitor, context);
}
function visitor(node) {
if ((node.transformFlags & 32) === 0) {
return node;
}
switch (node.kind) {
case 194:
return visitBinaryExpression(node);
default:
return ts.visitEachChild(node, visitor, context);
}
}
function visitBinaryExpression(node) {
switch (node.operatorToken.kind) {
case 62:
return visitExponentiationAssignmentExpression(node);
case 40:
return visitExponentiationExpression(node);
default:
return ts.visitEachChild(node, visitor, context);
}
}
function visitExponentiationAssignmentExpression(node) {
var target;
var value;
var left = ts.visitNode(node.left, visitor, ts.isExpression);
var right = ts.visitNode(node.right, visitor, ts.isExpression);
if (ts.isElementAccessExpression(left)) {
var expressionTemp = ts.createTempVariable(hoistVariableDeclaration);
var argumentExpressionTemp = ts.createTempVariable(hoistVariableDeclaration);
target = ts.setTextRange(ts.createElementAccess(ts.setTextRange(ts.createAssignment(expressionTemp, left.expression), left.expression), ts.setTextRange(ts.createAssignment(argumentExpressionTemp, left.argumentExpression), left.argumentExpression)), left);
value = ts.setTextRange(ts.createElementAccess(expressionTemp, argumentExpressionTemp), left);
}
else if (ts.isPropertyAccessExpression(left)) {
var expressionTemp = ts.createTempVariable(hoistVariableDeclaration);
target = ts.setTextRange(ts.createPropertyAccess(ts.setTextRange(ts.createAssignment(expressionTemp, left.expression), left.expression), left.name), left);
value = ts.setTextRange(ts.createPropertyAccess(expressionTemp, left.name), left);
}
else {
target = left;
value = left;
}
return ts.setTextRange(ts.createAssignment(target, ts.createMathPow(value, right, node)), node);
}
function visitExponentiationExpression(node) {
var left = ts.visitNode(node.left, visitor, ts.isExpression);
var right = ts.visitNode(node.right, visitor, ts.isExpression);
return ts.createMathPow(left, right, node);
}
}
ts.transformES2016 = transformES2016;
})(ts || (ts = {}));
var ts;
(function (ts) {
function transformES2015(context) {
var startLexicalEnvironment = context.startLexicalEnvironment, resumeLexicalEnvironment = context.resumeLexicalEnvironment, endLexicalEnvironment = context.endLexicalEnvironment, hoistVariableDeclaration = context.hoistVariableDeclaration;
var compilerOptions = context.getCompilerOptions();
var resolver = context.getEmitResolver();
var previousOnSubstituteNode = context.onSubstituteNode;
var previousOnEmitNode = context.onEmitNode;
context.onEmitNode = onEmitNode;
context.onSubstituteNode = onSubstituteNode;
var currentSourceFile;
var currentText;
var hierarchyFacts;
var taggedTemplateStringDeclarations;
function recordTaggedTemplateString(temp) {
taggedTemplateStringDeclarations = ts.append(taggedTemplateStringDeclarations, ts.createVariableDeclaration(temp));
}
var convertedLoopState;
var enabledSubstitutions;
return transformSourceFile;
function transformSourceFile(node) {
if (node.isDeclarationFile) {
return node;
}
currentSourceFile = node;
currentText = node.text;
var visited = visitSourceFile(node);
ts.addEmitHelpers(visited, context.readEmitHelpers());
currentSourceFile = undefined;
currentText = undefined;
taggedTemplateStringDeclarations = undefined;
hierarchyFacts = 0;
return visited;
}
function enterSubtree(excludeFacts, includeFacts) {
var ancestorFacts = hierarchyFacts;
hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & 16383;
return ancestorFacts;
}
function exitSubtree(ancestorFacts, excludeFacts, includeFacts) {
hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & -16384 | ancestorFacts;
}
function isReturnVoidStatementInConstructorWithCapturedSuper(node) {
return hierarchyFacts & 4096
&& node.kind === 219
&& !node.expression;
}
function shouldVisitNode(node) {
return (node.transformFlags & 128) !== 0
|| convertedLoopState !== undefined
|| (hierarchyFacts & 4096 && (ts.isStatement(node) || (node.kind === 207)))
|| (ts.isIterationStatement(node, false) && shouldConvertIterationStatementBody(node))
|| (ts.getEmitFlags(node) & 33554432) !== 0;
}
function visitor(node) {
if (shouldVisitNode(node)) {
return visitJavaScript(node);
}
else {
return node;
}
}
function functionBodyVisitor(node) {
if (shouldVisitNode(node)) {
return visitBlock(node, true);
}
return node;
}
function callExpressionVisitor(node) {
if (node.kind === 97) {
return visitSuperKeyword(true);
}
return visitor(node);
}
function visitJavaScript(node) {
switch (node.kind) {
case 115:
return undefined;
case 229:
return visitClassDeclaration(node);
case 199:
return visitClassExpression(node);
case 146:
return visitParameter(node);
case 228:
return visitFunctionDeclaration(node);
case 187:
return visitArrowFunction(node);
case 186:
return visitFunctionExpression(node);
case 226:
return visitVariableDeclaration(node);
case 71:
return visitIdentifier(node);
case 227:
return visitVariableDeclarationList(node);
case 221:
return visitSwitchStatement(node);
case 235:
return visitCaseBlock(node);
case 207:
return visitBlock(node, false);
case 218:
case 217:
return visitBreakOrContinueStatement(node);
case 222:
return visitLabeledStatement(node);
case 212:
case 213:
return visitDoOrWhileStatement(node, undefined);
case 214:
return visitForStatement(node, undefined);
case 215:
return visitForInStatement(node, undefined);
case 216:
return visitForOfStatement(node, undefined);
case 210:
return visitExpressionStatement(node);
case 178:
return visitObjectLiteralExpression(node);
case 260:
return visitCatchClause(node);
case 262:
return visitShorthandPropertyAssignment(node);
case 144:
return visitComputedPropertyName(node);
case 177:
return visitArrayLiteralExpression(node);
case 181:
return visitCallExpression(node);
case 182:
return visitNewExpression(node);
case 185:
return visitParenthesizedExpression(node, true);
case 194:
return visitBinaryExpression(node, true);
case 13:
case 14:
case 15:
case 16:
return visitTemplateLiteral(node);
case 9:
return visitStringLiteral(node);
case 8:
return visitNumericLiteral(node);
case 183:
return visitTaggedTemplateExpression(node);
case 196:
return visitTemplateExpression(node);
case 197:
return visitYieldExpression(node);
case 198:
return visitSpreadElement(node);
case 97:
return visitSuperKeyword(false);
case 99:
return visitThisKeyword(node);
case 204:
return visitMetaProperty(node);
case 151:
return visitMethodDeclaration(node);
case 153:
case 154:
return visitAccessorDeclaration(node);
case 208:
return visitVariableStatement(node);
case 219:
return visitReturnStatement(node);
default:
return ts.visitEachChild(node, visitor, context);
}
}
function visitSourceFile(node) {
var ancestorFacts = enterSubtree(3968, 64);
var statements = [];
startLexicalEnvironment();
var statementOffset = ts.addStandardPrologue(statements, node.statements, false);
addCaptureThisForNodeIfNeeded(statements, node);
statementOffset = ts.addCustomPrologue(statements, node.statements, statementOffset, visitor);
ts.addRange(statements, ts.visitNodes(node.statements, visitor, ts.isStatement, statementOffset));
if (taggedTemplateStringDeclarations) {
statements.push(ts.createVariableStatement(undefined, ts.createVariableDeclarationList(taggedTemplateStringDeclarations)));
}
ts.addRange(statements, endLexicalEnvironment());
exitSubtree(ancestorFacts, 0, 0);
return ts.updateSourceFileNode(node, ts.setTextRange(ts.createNodeArray(statements), node.statements));
}
function visitSwitchStatement(node) {
if (convertedLoopState !== undefined) {
var savedAllowedNonLabeledJumps = convertedLoopState.allowedNonLabeledJumps;
convertedLoopState.allowedNonLabeledJumps |= 2;
var result = ts.visitEachChild(node, visitor, context);
convertedLoopState.allowedNonLabeledJumps = savedAllowedNonLabeledJumps;
return result;
}
return ts.visitEachChild(node, visitor, context);
}
function visitCaseBlock(node) {
var ancestorFacts = enterSubtree(4032, 0);
var updated = ts.visitEachChild(node, visitor, context);
exitSubtree(ancestorFacts, 0, 0);
return updated;
}
function returnCapturedThis(node) {
return ts.setOriginalNode(ts.createReturn(ts.createIdentifier("_this")), node);
}
function visitReturnStatement(node) {
if (convertedLoopState) {
convertedLoopState.nonLocalJumps |= 8;
if (isReturnVoidStatementInConstructorWithCapturedSuper(node)) {
node = returnCapturedThis(node);
}
return ts.createReturn(ts.createObjectLiteral([
ts.createPropertyAssignment(ts.createIdentifier("value"), node.expression
? ts.visitNode(node.expression, visitor, ts.isExpression)
: ts.createVoidZero())
]));
}
else if (isReturnVoidStatementInConstructorWithCapturedSuper(node)) {
return returnCapturedThis(node);
}
return ts.visitEachChild(node, visitor, context);
}
function visitThisKeyword(node) {
if (convertedLoopState) {
if (hierarchyFacts & 2) {
convertedLoopState.containsLexicalThis = true;
return node;
}
return convertedLoopState.thisName || (convertedLoopState.thisName = ts.createUniqueName("this"));
}
return node;
}
function visitIdentifier(node) {
if (!convertedLoopState) {
return node;
}
if (ts.isGeneratedIdentifier(node)) {
return node;
}
if (node.escapedText !== "arguments" || !resolver.isArgumentsLocalBinding(node)) {
return node;
}
return convertedLoopState.argumentsName || (convertedLoopState.argumentsName = ts.createUniqueName("arguments"));
}
function visitBreakOrContinueStatement(node) {
if (convertedLoopState) {
var jump = node.kind === 218 ? 2 : 4;
var canUseBreakOrContinue = (node.label && convertedLoopState.labels && convertedLoopState.labels.get(ts.idText(node.label))) ||
(!node.label && (convertedLoopState.allowedNonLabeledJumps & jump));
if (!canUseBreakOrContinue) {
var labelMarker = void 0;
if (!node.label) {
if (node.kind === 218) {
convertedLoopState.nonLocalJumps |= 2;
labelMarker = "break";
}
else {
convertedLoopState.nonLocalJumps |= 4;
labelMarker = "continue";
}
}
else {
if (node.kind === 218) {
labelMarker = "break-" + node.label.escapedText;
setLabeledJump(convertedLoopState, true, ts.idText(node.label), labelMarker);
}
else {
labelMarker = "continue-" + node.label.escapedText;
setLabeledJump(convertedLoopState, false, ts.idText(node.label), labelMarker);
}
}
var returnExpression = ts.createLiteral(labelMarker);
if (convertedLoopState.loopOutParameters.length) {
var outParams = convertedLoopState.loopOutParameters;
var expr = void 0;
for (var i = 0; i < outParams.length; i++) {
var copyExpr = copyOutParameter(outParams[i], 1);
if (i === 0) {
expr = copyExpr;
}
else {
expr = ts.createBinary(expr, 26, copyExpr);
}
}
returnExpression = ts.createBinary(expr, 26, returnExpression);
}
return ts.createReturn(returnExpression);
}
}
return ts.visitEachChild(node, visitor, context);
}
function visitClassDeclaration(node) {
var variable = ts.createVariableDeclaration(ts.getLocalName(node, true), undefined, transformClassLikeDeclarationToExpression(node));
ts.setOriginalNode(variable, node);
var statements = [];
var statement = ts.createVariableStatement(undefined, ts.createVariableDeclarationList([variable]));
ts.setOriginalNode(statement, node);
ts.setTextRange(statement, node);
ts.startOnNewLine(statement);
statements.push(statement);
if (ts.hasModifier(node, 1)) {
var exportStatement = ts.hasModifier(node, 512)
? ts.createExportDefault(ts.getLocalName(node))
: ts.createExternalModuleExport(ts.getLocalName(node));
ts.setOriginalNode(exportStatement, statement);
statements.push(exportStatement);
}
var emitFlags = ts.getEmitFlags(node);
if ((emitFlags & 4194304) === 0) {
statements.push(ts.createEndOfDeclarationMarker(node));
ts.setEmitFlags(statement, emitFlags | 4194304);
}
return ts.singleOrMany(statements);
}
function visitClassExpression(node) {
return transformClassLikeDeclarationToExpression(node);
}
function transformClassLikeDeclarationToExpression(node) {
if (node.name) {
enableSubstitutionsForBlockScopedBindings();
}
var extendsClauseElement = ts.getClassExtendsHeritageClauseElement(node);
var classFunction = ts.createFunctionExpression(undefined, undefined, undefined, undefined, extendsClauseElement ? [ts.createParameter(undefined, undefined, undefined, "_super")] : [], undefined, transformClassBody(node, extendsClauseElement));
if (ts.getEmitFlags(node) & 65536) {
ts.setEmitFlags(classFunction, 65536);
}
var inner = ts.createPartiallyEmittedExpression(classFunction);
inner.end = node.end;
ts.setEmitFlags(inner, 1536);
var outer = ts.createPartiallyEmittedExpression(inner);
outer.end = ts.skipTrivia(currentText, node.pos);
ts.setEmitFlags(outer, 1536);
var result = ts.createParen(ts.createCall(outer, undefined, extendsClauseElement
? [ts.visitNode(extendsClauseElement.expression, visitor, ts.isExpression)]
: []));
ts.addSyntheticLeadingComment(result, 3, "* @class ");
return result;
}
function transformClassBody(node, extendsClauseElement) {
var statements = [];
startLexicalEnvironment();
addExtendsHelperIfNeeded(statements, node, extendsClauseElement);
addConstructor(statements, node, extendsClauseElement);
addClassMembers(statements, node);
var closingBraceLocation = ts.createTokenRange(ts.skipTrivia(currentText, node.members.end), 18);
var localName = ts.getInternalName(node);
var outer = ts.createPartiallyEmittedExpression(localName);
outer.end = closingBraceLocation.end;
ts.setEmitFlags(outer, 1536);
var statement = ts.createReturn(outer);
statement.pos = closingBraceLocation.pos;
ts.setEmitFlags(statement, 1536 | 384);
statements.push(statement);
ts.addRange(statements, endLexicalEnvironment());
var block = ts.createBlock(ts.setTextRange(ts.createNodeArray(statements), node.members), true);
ts.setEmitFlags(block, 1536);
return block;
}
function addExtendsHelperIfNeeded(statements, node, extendsClauseElement) {
if (extendsClauseElement) {
statements.push(ts.setTextRange(ts.createStatement(createExtendsHelper(context, ts.getLocalName(node))), extendsClauseElement));
}
}
function addConstructor(statements, node, extendsClauseElement) {
var savedConvertedLoopState = convertedLoopState;
convertedLoopState = undefined;
var ancestorFacts = enterSubtree(16278, 73);
var constructor = ts.getFirstConstructorWithBody(node);
var hasSynthesizedSuper = hasSynthesizedDefaultSuperCall(constructor, extendsClauseElement !== undefined);
var constructorFunction = ts.createFunctionDeclaration(undefined, undefined, undefined, ts.getInternalName(node), undefined, transformConstructorParameters(constructor, hasSynthesizedSuper), undefined, transformConstructorBody(constructor, node, extendsClauseElement, hasSynthesizedSuper));
ts.setTextRange(constructorFunction, constructor || node);
if (extendsClauseElement) {
ts.setEmitFlags(constructorFunction, 8);
}
statements.push(constructorFunction);
exitSubtree(ancestorFacts, 49152, 0);
convertedLoopState = savedConvertedLoopState;
}
function transformConstructorParameters(constructor, hasSynthesizedSuper) {
return ts.visitParameterList(constructor && !hasSynthesizedSuper && constructor.parameters, visitor, context)
|| [];
}
function transformConstructorBody(constructor, node, extendsClauseElement, hasSynthesizedSuper) {
var statements = [];
resumeLexicalEnvironment();
var statementOffset = -1;
if (hasSynthesizedSuper) {
statementOffset = 0;
}
else if (constructor) {
statementOffset = ts.addStandardPrologue(statements, constructor.body.statements, false);
}
if (constructor) {
addDefaultValueAssignmentsIfNeeded(statements, constructor);
addRestParameterIfNeeded(statements, constructor, hasSynthesizedSuper);
if (!hasSynthesizedSuper) {
statementOffset = ts.addCustomPrologue(statements, constructor.body.statements, statementOffset, visitor);
}
ts.Debug.assert(statementOffset >= 0, "statementOffset not initialized correctly!");
}
var isDerivedClass = extendsClauseElement && ts.skipOuterExpressions(extendsClauseElement.expression).kind !== 95;
var superCaptureStatus = declareOrCaptureOrReturnThisForConstructorIfNeeded(statements, constructor, isDerivedClass, hasSynthesizedSuper, statementOffset);
if (superCaptureStatus === 1 || superCaptureStatus === 2) {
statementOffset++;
}
if (constructor) {
if (superCaptureStatus === 1) {
hierarchyFacts |= 4096;
}
ts.addRange(statements, ts.visitNodes(constructor.body.statements, visitor, ts.isStatement, statementOffset));
}
if (isDerivedClass
&& superCaptureStatus !== 2
&& !(constructor && isSufficientlyCoveredByReturnStatements(constructor.body))) {
statements.push(ts.createReturn(ts.createIdentifier("_this")));
}
ts.addRange(statements, endLexicalEnvironment());
if (constructor) {
prependCaptureNewTargetIfNeeded(statements, constructor, false);
}
var block = ts.createBlock(ts.setTextRange(ts.createNodeArray(statements), constructor ? constructor.body.statements : node.members), true);
ts.setTextRange(block, constructor ? constructor.body : node);
if (!constructor) {
ts.setEmitFlags(block, 1536);
}
return block;
}
function isSufficientlyCoveredByReturnStatements(statement) {
if (statement.kind === 219) {
return true;
}
else if (statement.kind === 211) {
var ifStatement = statement;
if (ifStatement.elseStatement) {
return isSufficientlyCoveredByReturnStatements(ifStatement.thenStatement) &&
isSufficientlyCoveredByReturnStatements(ifStatement.elseStatement);
}
}
else if (statement.kind === 207) {
var lastStatement = ts.lastOrUndefined(statement.statements);
if (lastStatement && isSufficientlyCoveredByReturnStatements(lastStatement)) {
return true;
}
}
return false;
}
function declareOrCaptureOrReturnThisForConstructorIfNeeded(statements, ctor, isDerivedClass, hasSynthesizedSuper, statementOffset) {
if (!isDerivedClass) {
if (ctor) {
addCaptureThisForNodeIfNeeded(statements, ctor);
}
return 0;
}
if (!ctor) {
statements.push(ts.createReturn(createDefaultSuperCallOrThis()));
return 2;
}
if (hasSynthesizedSuper) {
captureThisForNode(statements, ctor, createDefaultSuperCallOrThis());
enableSubstitutionsForCapturedThis();
return 1;
}
var firstStatement;
var superCallExpression;
var ctorStatements = ctor.body.statements;
if (statementOffset < ctorStatements.length) {
firstStatement = ctorStatements[statementOffset];
if (firstStatement.kind === 210 && ts.isSuperCall(firstStatement.expression)) {
superCallExpression = visitImmediateSuperCallInBody(firstStatement.expression);
}
}
if (superCallExpression
&& statementOffset === ctorStatements.length - 1
&& !(ctor.transformFlags & (16384 | 32768))) {
var returnStatement = ts.createReturn(superCallExpression);
if (superCallExpression.kind !== 194
|| superCallExpression.left.kind !== 181) {
ts.Debug.fail("Assumed generated super call would have form 'super.call(...) || this'.");
}
ts.setCommentRange(returnStatement, ts.getCommentRange(ts.setEmitFlags(superCallExpression.left, 1536)));
statements.push(returnStatement);
return 2;
}
captureThisForNode(statements, ctor, superCallExpression || createActualThis(), firstStatement);
if (superCallExpression) {
return 1;
}
return 0;
}
function createActualThis() {
return ts.setEmitFlags(ts.createThis(), 4);
}
function createDefaultSuperCallOrThis() {
return ts.createLogicalOr(ts.createLogicalAnd(ts.createStrictInequality(ts.createIdentifier("_super"), ts.createNull()), ts.createFunctionApply(ts.createIdentifier("_super"), createActualThis(), ts.createIdentifier("arguments"))), createActualThis());
}
function visitParameter(node) {
if (node.dotDotDotToken) {
return undefined;
}
else if (ts.isBindingPattern(node.name)) {
return ts.setOriginalNode(ts.setTextRange(ts.createParameter(undefined, undefined, undefined, ts.getGeneratedNameForNode(node), undefined, undefined, undefined), node), node);
}
else if (node.initializer) {
return ts.setOriginalNode(ts.setTextRange(ts.createParameter(undefined, undefined, undefined, node.name, undefined, undefined, undefined), node), node);
}
else {
return node;
}
}
function shouldAddDefaultValueAssignments(node) {
return (node.transformFlags & 131072) !== 0;
}
function addDefaultValueAssignmentsIfNeeded(statements, node) {
if (!shouldAddDefaultValueAssignments(node)) {
return;
}
for (var _i = 0, _a = node.parameters; _i < _a.length; _i++) {
var parameter = _a[_i];
var name = parameter.name, initializer = parameter.initializer, dotDotDotToken = parameter.dotDotDotToken;
if (dotDotDotToken) {
continue;
}
if (ts.isBindingPattern(name)) {
addDefaultValueAssignmentForBindingPattern(statements, parameter, name, initializer);
}
else if (initializer) {
addDefaultValueAssignmentForInitializer(statements, parameter, name, initializer);
}
}
}
function addDefaultValueAssignmentForBindingPattern(statements, parameter, name, initializer) {
var temp = ts.getGeneratedNameForNode(parameter);
if (name.elements.length > 0) {
statements.push(ts.setEmitFlags(ts.createVariableStatement(undefined, ts.createVariableDeclarationList(ts.flattenDestructuringBinding(parameter, visitor, context, 0, temp))), 1048576));
}
else if (initializer) {
statements.push(ts.setEmitFlags(ts.createStatement(ts.createAssignment(temp, ts.visitNode(initializer, visitor, ts.isExpression))), 1048576));
}
}
function addDefaultValueAssignmentForInitializer(statements, parameter, name, initializer) {
initializer = ts.visitNode(initializer, visitor, ts.isExpression);
var statement = ts.createIf(ts.createTypeCheck(ts.getSynthesizedClone(name), "undefined"), ts.setEmitFlags(ts.setTextRange(ts.createBlock([
ts.createStatement(ts.setTextRange(ts.createAssignment(ts.setEmitFlags(ts.getMutableClone(name), 48), ts.setEmitFlags(initializer, 48 | ts.getEmitFlags(initializer))), parameter))
]), parameter), 1 | 32 | 384));
statement.startsOnNewLine = true;
ts.setTextRange(statement, parameter);
ts.setEmitFlags(statement, 384 | 32 | 1048576);
statements.push(statement);
}
function shouldAddRestParameter(node, inConstructorWithSynthesizedSuper) {
return node && node.dotDotDotToken && node.name.kind === 71 && !inConstructorWithSynthesizedSuper;
}
function addRestParameterIfNeeded(statements, node, inConstructorWithSynthesizedSuper) {
var parameter = ts.lastOrUndefined(node.parameters);
if (!shouldAddRestParameter(parameter, inConstructorWithSynthesizedSuper)) {
return;
}
var declarationName = ts.getMutableClone(parameter.name);
ts.setEmitFlags(declarationName, 48);
var expressionName = ts.getSynthesizedClone(parameter.name);
var restIndex = node.parameters.length - 1;
var temp = ts.createLoopVariable();
statements.push(ts.setEmitFlags(ts.setTextRange(ts.createVariableStatement(undefined, ts.createVariableDeclarationList([
ts.createVariableDeclaration(declarationName, undefined, ts.createArrayLiteral([]))
])), parameter), 1048576));
var forStatement = ts.createFor(ts.setTextRange(ts.createVariableDeclarationList([
ts.createVariableDeclaration(temp, undefined, ts.createLiteral(restIndex))
]), parameter), ts.setTextRange(ts.createLessThan(temp, ts.createPropertyAccess(ts.createIdentifier("arguments"), "length")), parameter), ts.setTextRange(ts.createPostfixIncrement(temp), parameter), ts.createBlock([
ts.startOnNewLine(ts.setTextRange(ts.createStatement(ts.createAssignment(ts.createElementAccess(expressionName, restIndex === 0
? temp
: ts.createSubtract(temp, ts.createLiteral(restIndex))), ts.createElementAccess(ts.createIdentifier("arguments"), temp))), parameter))
]));
ts.setEmitFlags(forStatement, 1048576);
ts.startOnNewLine(forStatement);
statements.push(forStatement);
}
function addCaptureThisForNodeIfNeeded(statements, node) {
if (node.transformFlags & 32768 && node.kind !== 187) {
captureThisForNode(statements, node, ts.createThis());
}
}
function captureThisForNode(statements, node, initializer, originalStatement) {
enableSubstitutionsForCapturedThis();
var captureThisStatement = ts.createVariableStatement(undefined, ts.createVariableDeclarationList([
ts.createVariableDeclaration("_this", undefined, initializer)
]));
ts.setEmitFlags(captureThisStatement, 1536 | 1048576);
ts.setTextRange(captureThisStatement, originalStatement);
ts.setSourceMapRange(captureThisStatement, node);
statements.push(captureThisStatement);
}
function prependCaptureNewTargetIfNeeded(statements, node, copyOnWrite) {
if (hierarchyFacts & 16384) {
var newTarget = void 0;
switch (node.kind) {
case 187:
return statements;
case 151:
case 153:
case 154:
newTarget = ts.createVoidZero();
break;
case 152:
newTarget = ts.createPropertyAccess(ts.setEmitFlags(ts.createThis(), 4), "constructor");
break;
case 228:
case 186:
newTarget = ts.createConditional(ts.createLogicalAnd(ts.setEmitFlags(ts.createThis(), 4), ts.createBinary(ts.setEmitFlags(ts.createThis(), 4), 93, ts.getLocalName(node))), ts.createPropertyAccess(ts.setEmitFlags(ts.createThis(), 4), "constructor"), ts.createVoidZero());
break;
default:
ts.Debug.failBadSyntaxKind(node);
break;
}
var captureNewTargetStatement = ts.createVariableStatement(undefined, ts.createVariableDeclarationList([
ts.createVariableDeclaration("_newTarget", undefined, newTarget)
]));
if (copyOnWrite) {
return [captureNewTargetStatement].concat(statements);
}
statements.unshift(captureNewTargetStatement);
}
return statements;
}
function addClassMembers(statements, node) {
for (var _i = 0, _a = node.members; _i < _a.length; _i++) {
var member = _a[_i];
switch (member.kind) {
case 206:
statements.push(transformSemicolonClassElementToStatement(member));
break;
case 151:
statements.push(transformClassMethodDeclarationToStatement(getClassMemberPrefix(node, member), member, node));
break;
case 153:
case 154:
var accessors = ts.getAllAccessorDeclarations(node.members, member);
if (member === accessors.firstAccessor) {
statements.push(transformAccessorsToStatement(getClassMemberPrefix(node, member), accessors, node));
}
break;
case 152:
break;
default:
ts.Debug.failBadSyntaxKind(node);
break;
}
}
}
function transformSemicolonClassElementToStatement(member) {
return ts.setTextRange(ts.createEmptyStatement(), member);
}
function transformClassMethodDeclarationToStatement(receiver, member, container) {
var ancestorFacts = enterSubtree(0, 0);
var commentRange = ts.getCommentRange(member);
var sourceMapRange = ts.getSourceMapRange(member);
var memberName = ts.createMemberAccessForPropertyName(receiver, ts.visitNode(member.name, visitor, ts.isPropertyName), member.name);
var memberFunction = transformFunctionLikeToExpression(member, member, undefined, container);
ts.setEmitFlags(memberFunction, 1536);
ts.setSourceMapRange(memberFunction, sourceMapRange);
var statement = ts.setTextRange(ts.createStatement(ts.createAssignment(memberName, memberFunction)), member);
ts.setOriginalNode(statement, member);
ts.setCommentRange(statement, commentRange);
ts.setEmitFlags(statement, 48);
exitSubtree(ancestorFacts, 49152, hierarchyFacts & 49152 ? 16384 : 0);
return statement;
}
function transformAccessorsToStatement(receiver, accessors, container) {
var statement = ts.createStatement(transformAccessorsToExpression(receiver, accessors, container, false));
ts.setEmitFlags(statement, 1536);
ts.setSourceMapRange(statement, ts.getSourceMapRange(accessors.firstAccessor));
return statement;
}
function transformAccessorsToExpression(receiver, _a, container, startsOnNewLine) {
var firstAccessor = _a.firstAccessor, getAccessor = _a.getAccessor, setAccessor = _a.setAccessor;
var ancestorFacts = enterSubtree(0, 0);
var target = ts.getMutableClone(receiver);
ts.setEmitFlags(target, 1536 | 32);
ts.setSourceMapRange(target, firstAccessor.name);
var propertyName = ts.createExpressionForPropertyName(ts.visitNode(firstAccessor.name, visitor, ts.isPropertyName));
ts.setEmitFlags(propertyName, 1536 | 16);
ts.setSourceMapRange(propertyName, firstAccessor.name);
var properties = [];
if (getAccessor) {
var getterFunction = transformFunctionLikeToExpression(getAccessor, undefined, undefined, container);
ts.setSourceMapRange(getterFunction, ts.getSourceMapRange(getAccessor));
ts.setEmitFlags(getterFunction, 512);
var getter = ts.createPropertyAssignment("get", getterFunction);
ts.setCommentRange(getter, ts.getCommentRange(getAccessor));
properties.push(getter);
}
if (setAccessor) {
var setterFunction = transformFunctionLikeToExpression(setAccessor, undefined, undefined, container);
ts.setSourceMapRange(setterFunction, ts.getSourceMapRange(setAccessor));
ts.setEmitFlags(setterFunction, 512);
var setter = ts.createPropertyAssignment("set", setterFunction);
ts.setCommentRange(setter, ts.getCommentRange(setAccessor));
properties.push(setter);
}
properties.push(ts.createPropertyAssignment("enumerable", ts.createTrue()), ts.createPropertyAssignment("configurable", ts.createTrue()));
var call = ts.createCall(ts.createPropertyAccess(ts.createIdentifier("Object"), "defineProperty"), undefined, [
target,
propertyName,
ts.createObjectLiteral(properties, true)
]);
if (startsOnNewLine) {
call.startsOnNewLine = true;
}
exitSubtree(ancestorFacts, 49152, hierarchyFacts & 49152 ? 16384 : 0);
return call;
}
function visitArrowFunction(node) {
if (node.transformFlags & 16384) {
enableSubstitutionsForCapturedThis();
}
var savedConvertedLoopState = convertedLoopState;
convertedLoopState = undefined;
var ancestorFacts = enterSubtree(16256, 66);
var func = ts.createFunctionExpression(undefined, undefined, undefined, undefined, ts.visitParameterList(node.parameters, visitor, context), undefined, transformFunctionBody(node));
ts.setTextRange(func, node);
ts.setOriginalNode(func, node);
ts.setEmitFlags(func, 8);
exitSubtree(ancestorFacts, 0, 0);
convertedLoopState = savedConvertedLoopState;
return func;
}
function visitFunctionExpression(node) {
var ancestorFacts = ts.getEmitFlags(node) & 262144
? enterSubtree(16278, 69)
: enterSubtree(16286, 65);
var savedConvertedLoopState = convertedLoopState;
convertedLoopState = undefined;
var parameters = ts.visitParameterList(node.parameters, visitor, context);
var body = node.transformFlags & 64
? transformFunctionBody(node)
: visitFunctionBodyDownLevel(node);
var name = hierarchyFacts & 16384
? ts.getLocalName(node)
: node.name;
exitSubtree(ancestorFacts, 49152, 0);
convertedLoopState = savedConvertedLoopState;
return ts.updateFunctionExpression(node, undefined, node.asteriskToken, name, undefined, parameters, undefined, body);
}
function visitFunctionDeclaration(node) {
var savedConvertedLoopState = convertedLoopState;
convertedLoopState = undefined;
var ancestorFacts = enterSubtree(16286, 65);
var parameters = ts.visitParameterList(node.parameters, visitor, context);
var body = node.transformFlags & 64
? transformFunctionBody(node)
: visitFunctionBodyDownLevel(node);
var name = hierarchyFacts & 16384
? ts.getLocalName(node)
: node.name;
exitSubtree(ancestorFacts, 49152, 0);
convertedLoopState = savedConvertedLoopState;
return ts.updateFunctionDeclaration(node, undefined, ts.visitNodes(node.modifiers, visitor, ts.isModifier), node.asteriskToken, name, undefined, parameters, undefined, body);
}
function transformFunctionLikeToExpression(node, location, name, container) {
var savedConvertedLoopState = convertedLoopState;
convertedLoopState = undefined;
var ancestorFacts = container && ts.isClassLike(container) && !ts.hasModifier(node, 32)
? enterSubtree(16286, 65 | 8)
: enterSubtree(16286, 65);
var parameters = ts.visitParameterList(node.parameters, visitor, context);
var body = transformFunctionBody(node);
if (hierarchyFacts & 16384 && !name && (node.kind === 228 || node.kind === 186)) {
name = ts.getGeneratedNameForNode(node);
}
exitSubtree(ancestorFacts, 49152, 0);
convertedLoopState = savedConvertedLoopState;
return ts.setOriginalNode(ts.setTextRange(ts.createFunctionExpression(undefined, node.asteriskToken, name, undefined, parameters, undefined, body), location), node);
}
function transformFunctionBody(node) {
var multiLine = false;
var singleLine = false;
var statementsLocation;
var closeBraceLocation;
var statements = [];
var body = node.body;
var statementOffset;
resumeLexicalEnvironment();
if (ts.isBlock(body)) {
statementOffset = ts.addStandardPrologue(statements, body.statements, false);
}
addCaptureThisForNodeIfNeeded(statements, node);
addDefaultValueAssignmentsIfNeeded(statements, node);
addRestParameterIfNeeded(statements, node, false);
if (!multiLine && statements.length > 0) {
multiLine = true;
}
if (ts.isBlock(body)) {
statementOffset = ts.addCustomPrologue(statements, body.statements, statementOffset, visitor);
statementsLocation = body.statements;
ts.addRange(statements, ts.visitNodes(body.statements, visitor, ts.isStatement, statementOffset));
if (!multiLine && body.multiLine) {
multiLine = true;
}
}
else {
ts.Debug.assert(node.kind === 187);
statementsLocation = ts.moveRangeEnd(body, -1);
var equalsGreaterThanToken = node.equalsGreaterThanToken;
if (!ts.nodeIsSynthesized(equalsGreaterThanToken) && !ts.nodeIsSynthesized(body)) {
if (ts.rangeEndIsOnSameLineAsRangeStart(equalsGreaterThanToken, body, currentSourceFile)) {
singleLine = true;
}
else {
multiLine = true;
}
}
var expression = ts.visitNode(body, visitor, ts.isExpression);
var returnStatement = ts.createReturn(expression);
ts.setTextRange(returnStatement, body);
ts.setEmitFlags(returnStatement, 384 | 32 | 1024);
statements.push(returnStatement);
closeBraceLocation = body;
}
var lexicalEnvironment = context.endLexicalEnvironment();
ts.addRange(statements, lexicalEnvironment);
prependCaptureNewTargetIfNeeded(statements, node, false);
if (!multiLine && lexicalEnvironment && lexicalEnvironment.length) {
multiLine = true;
}
var block = ts.createBlock(ts.setTextRange(ts.createNodeArray(statements), statementsLocation), multiLine);
ts.setTextRange(block, node.body);
if (!multiLine && singleLine) {
ts.setEmitFlags(block, 1);
}
if (closeBraceLocation) {
ts.setTokenSourceMapRange(block, 18, closeBraceLocation);
}
ts.setOriginalNode(block, node.body);
return block;
}
function visitFunctionBodyDownLevel(node) {
var updated = ts.visitFunctionBody(node.body, functionBodyVisitor, context);
return ts.updateBlock(updated, ts.setTextRange(ts.createNodeArray(prependCaptureNewTargetIfNeeded(updated.statements, node, true)), updated.statements));
}
function visitBlock(node, isFunctionBody) {
if (isFunctionBody) {
return ts.visitEachChild(node, visitor, context);
}
var ancestorFacts = hierarchyFacts & 256
? enterSubtree(4032, 512)
: enterSubtree(3904, 128);
var updated = ts.visitEachChild(node, visitor, context);
exitSubtree(ancestorFacts, 0, 0);
return updated;
}
function visitExpressionStatement(node) {
switch (node.expression.kind) {
case 185:
return ts.updateStatement(node, visitParenthesizedExpression(node.expression, false));
case 194:
return ts.updateStatement(node, visitBinaryExpression(node.expression, false));
}
return ts.visitEachChild(node, visitor, context);
}
function visitParenthesizedExpression(node, needsDestructuringValue) {
if (!needsDestructuringValue) {
switch (node.expression.kind) {
case 185:
return ts.updateParen(node, visitParenthesizedExpression(node.expression, false));
case 194:
return ts.updateParen(node, visitBinaryExpression(node.expression, false));
}
}
return ts.visitEachChild(node, visitor, context);
}
function visitBinaryExpression(node, needsDestructuringValue) {
if (ts.isDestructuringAssignment(node)) {
return ts.flattenDestructuringAssignment(node, visitor, context, 0, needsDestructuringValue);
}
return ts.visitEachChild(node, visitor, context);
}
function visitVariableStatement(node) {
var ancestorFacts = enterSubtree(0, ts.hasModifier(node, 1) ? 32 : 0);
var updated;
if (convertedLoopState && (node.declarationList.flags & 3) === 0) {
var assignments = void 0;
for (var _i = 0, _a = node.declarationList.declarations; _i < _a.length; _i++) {
var decl = _a[_i];
hoistVariableDeclarationDeclaredInConvertedLoop(convertedLoopState, decl);
if (decl.initializer) {
var assignment = void 0;
if (ts.isBindingPattern(decl.name)) {
assignment = ts.flattenDestructuringAssignment(decl, visitor, context, 0);
}
else {
assignment = ts.createBinary(decl.name, 58, ts.visitNode(decl.initializer, visitor, ts.isExpression));
ts.setTextRange(assignment, decl);
}
assignments = ts.append(assignments, assignment);
}
}
if (assignments) {
updated = ts.setTextRange(ts.createStatement(ts.inlineExpressions(assignments)), node);
}
else {
updated = undefined;
}
}
else {
updated = ts.visitEachChild(node, visitor, context);
}
exitSubtree(ancestorFacts, 0, 0);
return updated;
}
function visitVariableDeclarationList(node) {
if (node.transformFlags & 64) {
if (node.flags & 3) {
enableSubstitutionsForBlockScopedBindings();
}
var declarations = ts.flatMap(node.declarations, node.flags & 1
? visitVariableDeclarationInLetDeclarationList
: visitVariableDeclaration);
var declarationList = ts.createVariableDeclarationList(declarations);
ts.setOriginalNode(declarationList, node);
ts.setTextRange(declarationList, node);
ts.setCommentRange(declarationList, node);
if (node.transformFlags & 8388608
&& (ts.isBindingPattern(node.declarations[0].name) || ts.isBindingPattern(ts.lastOrUndefined(node.declarations).name))) {
var firstDeclaration = ts.firstOrUndefined(declarations);
if (firstDeclaration) {
var lastDeclaration = ts.lastOrUndefined(declarations);
ts.setSourceMapRange(declarationList, ts.createRange(firstDeclaration.pos, lastDeclaration.end));
}
}
return declarationList;
}
return ts.visitEachChild(node, visitor, context);
}
function shouldEmitExplicitInitializerForLetDeclaration(node) {
var flags = resolver.getNodeCheckFlags(node);
var isCapturedInFunction = flags & 131072;
var isDeclaredInLoop = flags & 262144;
var emittedAsTopLevel = (hierarchyFacts & 64) !== 0
|| (isCapturedInFunction
&& isDeclaredInLoop
&& (hierarchyFacts & 512) !== 0);
var emitExplicitInitializer = !emittedAsTopLevel
&& (hierarchyFacts & 2048) === 0
&& (!resolver.isDeclarationWithCollidingName(node)
|| (isDeclaredInLoop
&& !isCapturedInFunction
&& (hierarchyFacts & (1024 | 2048)) === 0));
return emitExplicitInitializer;
}
function visitVariableDeclarationInLetDeclarationList(node) {
var name = node.name;
if (ts.isBindingPattern(name)) {
return visitVariableDeclaration(node);
}
if (!node.initializer && shouldEmitExplicitInitializerForLetDeclaration(node)) {
var clone_2 = ts.getMutableClone(node);
clone_2.initializer = ts.createVoidZero();
return clone_2;
}
return ts.visitEachChild(node, visitor, context);
}
function visitVariableDeclaration(node) {
var ancestorFacts = enterSubtree(32, 0);
var updated;
if (ts.isBindingPattern(node.name)) {
updated = ts.flattenDestructuringBinding(node, visitor, context, 0, undefined, (ancestorFacts & 32) !== 0);
}
else {
updated = ts.visitEachChild(node, visitor, context);
}
exitSubtree(ancestorFacts, 0, 0);
return updated;
}
function recordLabel(node) {
convertedLoopState.labels.set(ts.idText(node.label), true);
}
function resetLabel(node) {
convertedLoopState.labels.set(ts.idText(node.label), false);
}
function visitLabeledStatement(node) {
if (convertedLoopState && !convertedLoopState.labels) {
convertedLoopState.labels = ts.createMap();
}
var statement = ts.unwrapInnermostStatementOfLabel(node, convertedLoopState && recordLabel);
return ts.isIterationStatement(statement, false)
? visitIterationStatement(statement, node)
: ts.restoreEnclosingLabel(ts.visitNode(statement, visitor, ts.isStatement), node, convertedLoopState && resetLabel);
}
function visitIterationStatement(node, outermostLabeledStatement) {
switch (node.kind) {
case 212:
case 213:
return visitDoOrWhileStatement(node, outermostLabeledStatement);
case 214:
return visitForStatement(node, outermostLabeledStatement);
case 215:
return visitForInStatement(node, outermostLabeledStatement);
case 216:
return visitForOfStatement(node, outermostLabeledStatement);
}
}
function visitIterationStatementWithFacts(excludeFacts, includeFacts, node, outermostLabeledStatement, convert) {
var ancestorFacts = enterSubtree(excludeFacts, includeFacts);
var updated = convertIterationStatementBodyIfNecessary(node, outermostLabeledStatement, convert);
exitSubtree(ancestorFacts, 0, 0);
return updated;
}
function visitDoOrWhileStatement(node, outermostLabeledStatement) {
return visitIterationStatementWithFacts(0, 256, node, outermostLabeledStatement);
}
function visitForStatement(node, outermostLabeledStatement) {
return visitIterationStatementWithFacts(3008, 1280, node, outermostLabeledStatement);
}
function visitForInStatement(node, outermostLabeledStatement) {
return visitIterationStatementWithFacts(1984, 2304, node, outermostLabeledStatement);
}
function visitForOfStatement(node, outermostLabeledStatement) {
return visitIterationStatementWithFacts(1984, 2304, node, outermostLabeledStatement, compilerOptions.downlevelIteration ? convertForOfStatementForIterable : convertForOfStatementForArray);
}
function convertForOfStatementHead(node, boundValue, convertedLoopBodyStatements) {
var statements = [];
if (ts.isVariableDeclarationList(node.initializer)) {
if (node.initializer.flags & 3) {
enableSubstitutionsForBlockScopedBindings();
}
var firstOriginalDeclaration = ts.firstOrUndefined(node.initializer.declarations);
if (firstOriginalDeclaration && ts.isBindingPattern(firstOriginalDeclaration.name)) {
var declarations = ts.flattenDestructuringBinding(firstOriginalDeclaration, visitor, context, 0, boundValue);
var declarationList = ts.setTextRange(ts.createVariableDeclarationList(declarations), node.initializer);
ts.setOriginalNode(declarationList, node.initializer);
var firstDeclaration = declarations[0];
var lastDeclaration = ts.lastOrUndefined(declarations);
ts.setSourceMapRange(declarationList, ts.createRange(firstDeclaration.pos, lastDeclaration.end));
statements.push(ts.createVariableStatement(undefined, declarationList));
}
else {
statements.push(ts.setTextRange(ts.createVariableStatement(undefined, ts.setOriginalNode(ts.setTextRange(ts.createVariableDeclarationList([
ts.createVariableDeclaration(firstOriginalDeclaration ? firstOriginalDeclaration.name : ts.createTempVariable(undefined), undefined, boundValue)
]), ts.moveRangePos(node.initializer, -1)), node.initializer)), ts.moveRangeEnd(node.initializer, -1)));
}
}
else {
var assignment = ts.createAssignment(node.initializer, boundValue);
if (ts.isDestructuringAssignment(assignment)) {
ts.aggregateTransformFlags(assignment);
statements.push(ts.createStatement(visitBinaryExpression(assignment, false)));
}
else {
assignment.end = node.initializer.end;
statements.push(ts.setTextRange(ts.createStatement(ts.visitNode(assignment, visitor, ts.isExpression)), ts.moveRangeEnd(node.initializer, -1)));
}
}
var bodyLocation;
var statementsLocation;
if (convertedLoopBodyStatements) {
ts.addRange(statements, convertedLoopBodyStatements);
}
else {
var statement = ts.visitNode(node.statement, visitor, ts.isStatement, ts.liftToBlock);
if (ts.isBlock(statement)) {
ts.addRange(statements, statement.statements);
bodyLocation = statement;
statementsLocation = statement.statements;
}
else {
statements.push(statement);
}
}
return ts.setEmitFlags(ts.setTextRange(ts.createBlock(ts.setTextRange(ts.createNodeArray(statements), statementsLocation), true), bodyLocation), 48 | 384);
}
function convertForOfStatementForArray(node, outermostLabeledStatement, convertedLoopBodyStatements) {
var expression = ts.visitNode(node.expression, visitor, ts.isExpression);
var counter = ts.createLoopVariable();
var rhsReference = ts.isIdentifier(expression) ? ts.getGeneratedNameForNode(expression) : ts.createTempVariable(undefined);
ts.setEmitFlags(expression, 48 | ts.getEmitFlags(expression));
var forStatement = ts.setTextRange(ts.createFor(ts.setEmitFlags(ts.setTextRange(ts.createVariableDeclarationList([
ts.setTextRange(ts.createVariableDeclaration(counter, undefined, ts.createLiteral(0)), ts.moveRangePos(node.expression, -1)),
ts.setTextRange(ts.createVariableDeclaration(rhsReference, undefined, expression), node.expression)
]), node.expression), 2097152), ts.setTextRange(ts.createLessThan(counter, ts.createPropertyAccess(rhsReference, "length")), node.expression), ts.setTextRange(ts.createPostfixIncrement(counter), node.expression), convertForOfStatementHead(node, ts.createElementAccess(rhsReference, counter), convertedLoopBodyStatements)), node);
ts.setEmitFlags(forStatement, 256);
ts.setTextRange(forStatement, node);
return ts.restoreEnclosingLabel(forStatement, outermostLabeledStatement, convertedLoopState && resetLabel);
}
function convertForOfStatementForIterable(node, outermostLabeledStatement, convertedLoopBodyStatements) {
var expression = ts.visitNode(node.expression, visitor, ts.isExpression);
var iterator = ts.isIdentifier(expression) ? ts.getGeneratedNameForNode(expression) : ts.createTempVariable(undefined);
var result = ts.isIdentifier(expression) ? ts.getGeneratedNameForNode(iterator) : ts.createTempVariable(undefined);
var errorRecord = ts.createUniqueName("e");
var catchVariable = ts.getGeneratedNameForNode(errorRecord);
var returnMethod = ts.createTempVariable(undefined);
var values = ts.createValuesHelper(context, expression, node.expression);
var next = ts.createCall(ts.createPropertyAccess(iterator, "next"), undefined, []);
hoistVariableDeclaration(errorRecord);
hoistVariableDeclaration(returnMethod);
var forStatement = ts.setEmitFlags(ts.setTextRange(ts.createFor(ts.setEmitFlags(ts.setTextRange(ts.createVariableDeclarationList([
ts.setTextRange(ts.createVariableDeclaration(iterator, undefined, values), node.expression),
ts.createVariableDeclaration(result, undefined, next)
]), node.expression), 2097152), ts.createLogicalNot(ts.createPropertyAccess(result, "done")), ts.createAssignment(result, next), convertForOfStatementHead(node, ts.createPropertyAccess(result, "value"), convertedLoopBodyStatements)), node), 256);
return ts.createTry(ts.createBlock([
ts.restoreEnclosingLabel(forStatement, outermostLabeledStatement, convertedLoopState && resetLabel)
]), ts.createCatchClause(ts.createVariableDeclaration(catchVariable), ts.setEmitFlags(ts.createBlock([
ts.createStatement(ts.createAssignment(errorRecord, ts.createObjectLiteral([
ts.createPropertyAssignment("error", catchVariable)
])))
]), 1)), ts.createBlock([
ts.createTry(ts.createBlock([
ts.setEmitFlags(ts.createIf(ts.createLogicalAnd(ts.createLogicalAnd(result, ts.createLogicalNot(ts.createPropertyAccess(result, "done"))), ts.createAssignment(returnMethod, ts.createPropertyAccess(iterator, "return"))), ts.createStatement(ts.createFunctionCall(returnMethod, iterator, []))), 1),
]), undefined, ts.setEmitFlags(ts.createBlock([
ts.setEmitFlags(ts.createIf(errorRecord, ts.createThrow(ts.createPropertyAccess(errorRecord, "error"))), 1)
]), 1))
]));
}
function visitObjectLiteralExpression(node) {
var properties = node.properties;
var numProperties = properties.length;
var numInitialProperties = numProperties;
var numInitialPropertiesWithoutYield = numProperties;
for (var i = 0; i < numProperties; i++) {
var property = properties[i];
if ((property.transformFlags & 16777216 && hierarchyFacts & 4)
&& i < numInitialPropertiesWithoutYield) {
numInitialPropertiesWithoutYield = i;
}
if (property.name.kind === 144) {
numInitialProperties = i;
break;
}
}
if (numInitialProperties !== numProperties) {
if (numInitialPropertiesWithoutYield < numInitialProperties) {
numInitialProperties = numInitialPropertiesWithoutYield;
}
var temp = ts.createTempVariable(hoistVariableDeclaration);
var expressions = [];
var assignment = ts.createAssignment(temp, ts.setEmitFlags(ts.createObjectLiteral(ts.visitNodes(properties, visitor, ts.isObjectLiteralElementLike, 0, numInitialProperties), node.multiLine), 65536));
if (node.multiLine) {
assignment.startsOnNewLine = true;
}
expressions.push(assignment);
addObjectLiteralMembers(expressions, node, temp, numInitialProperties);
expressions.push(node.multiLine ? ts.startOnNewLine(ts.getMutableClone(temp)) : temp);
return ts.inlineExpressions(expressions);
}
return ts.visitEachChild(node, visitor, context);
}
function shouldConvertIterationStatementBody(node) {
return (resolver.getNodeCheckFlags(node) & 65536) !== 0;
}
function hoistVariableDeclarationDeclaredInConvertedLoop(state, node) {
if (!state.hoistedLocalVariables) {
state.hoistedLocalVariables = [];
}
visit(node.name);
function visit(node) {
if (node.kind === 71) {
state.hoistedLocalVariables.push(node);
}
else {
for (var _i = 0, _a = node.elements; _i < _a.length; _i++) {
var element = _a[_i];
if (!ts.isOmittedExpression(element)) {
visit(element.name);
}
}
}
}
}
function convertIterationStatementBodyIfNecessary(node, outermostLabeledStatement, convert) {
if (!shouldConvertIterationStatementBody(node)) {
var saveAllowedNonLabeledJumps = void 0;
if (convertedLoopState) {
saveAllowedNonLabeledJumps = convertedLoopState.allowedNonLabeledJumps;
convertedLoopState.allowedNonLabeledJumps = 2 | 4;
}
var result = convert
? convert(node, outermostLabeledStatement, undefined)
: ts.restoreEnclosingLabel(ts.visitEachChild(node, visitor, context), outermostLabeledStatement, convertedLoopState && resetLabel);
if (convertedLoopState) {
convertedLoopState.allowedNonLabeledJumps = saveAllowedNonLabeledJumps;
}
return result;
}
var functionName = ts.createUniqueName("_loop");
var loopInitializer;
switch (node.kind) {
case 214:
case 215:
case 216:
var initializer = node.initializer;
if (initializer && initializer.kind === 227) {
loopInitializer = initializer;
}
break;
}
var loopParameters = [];
var loopOutParameters = [];
if (loopInitializer && (ts.getCombinedNodeFlags(loopInitializer) & 3)) {
for (var _i = 0, _a = loopInitializer.declarations; _i < _a.length; _i++) {
var decl = _a[_i];
processLoopVariableDeclaration(decl, loopParameters, loopOutParameters);
}
}
var outerConvertedLoopState = convertedLoopState;
convertedLoopState = { loopOutParameters: loopOutParameters };
if (outerConvertedLoopState) {
if (outerConvertedLoopState.argumentsName) {
convertedLoopState.argumentsName = outerConvertedLoopState.argumentsName;
}
if (outerConvertedLoopState.thisName) {
convertedLoopState.thisName = outerConvertedLoopState.thisName;
}
if (outerConvertedLoopState.hoistedLocalVariables) {
convertedLoopState.hoistedLocalVariables = outerConvertedLoopState.hoistedLocalVariables;
}
}
startLexicalEnvironment();
var loopBody = ts.visitNode(node.statement, visitor, ts.isStatement, ts.liftToBlock);
var lexicalEnvironment = endLexicalEnvironment();
var currentState = convertedLoopState;
convertedLoopState = outerConvertedLoopState;
if (loopOutParameters.length || lexicalEnvironment) {
var statements_4 = ts.isBlock(loopBody) ? loopBody.statements.slice() : [loopBody];
if (loopOutParameters.length) {
copyOutParameters(loopOutParameters, 1, statements_4);
}
ts.addRange(statements_4, lexicalEnvironment);
loopBody = ts.createBlock(statements_4, true);
}
if (ts.isBlock(loopBody)) {
loopBody.multiLine = true;
}
else {
loopBody = ts.createBlock([loopBody], true);
}
var containsYield = (node.statement.transformFlags & 16777216) !== 0;
var isAsyncBlockContainingAwait = containsYield && (hierarchyFacts & 4) !== 0;
var loopBodyFlags = 0;
if (currentState.containsLexicalThis) {
loopBodyFlags |= 8;
}
if (isAsyncBlockContainingAwait) {
loopBodyFlags |= 262144;
}
var convertedLoopVariable = ts.createVariableStatement(undefined, ts.setEmitFlags(ts.createVariableDeclarationList([
ts.createVariableDeclaration(functionName, undefined, ts.setEmitFlags(ts.createFunctionExpression(undefined, containsYield ? ts.createToken(39) : undefined, undefined, undefined, loopParameters, undefined, loopBody), loopBodyFlags))
]), 2097152));
var statements = [convertedLoopVariable];
var extraVariableDeclarations;
if (currentState.argumentsName) {
if (outerConvertedLoopState) {
outerConvertedLoopState.argumentsName = currentState.argumentsName;
}
else {
(extraVariableDeclarations || (extraVariableDeclarations = [])).push(ts.createVariableDeclaration(currentState.argumentsName, undefined, ts.createIdentifier("arguments")));
}
}
if (currentState.thisName) {
if (outerConvertedLoopState) {
outerConvertedLoopState.thisName = currentState.thisName;
}
else {
(extraVariableDeclarations || (extraVariableDeclarations = [])).push(ts.createVariableDeclaration(currentState.thisName, undefined, ts.createIdentifier("this")));
}
}
if (currentState.hoistedLocalVariables) {
if (outerConvertedLoopState) {
outerConvertedLoopState.hoistedLocalVariables = currentState.hoistedLocalVariables;
}
else {
if (!extraVariableDeclarations) {
extraVariableDeclarations = [];
}
for (var _b = 0, _c = currentState.hoistedLocalVariables; _b < _c.length; _b++) {
var identifier = _c[_b];
extraVariableDeclarations.push(ts.createVariableDeclaration(identifier));
}
}
}
if (loopOutParameters.length) {
if (!extraVariableDeclarations) {
extraVariableDeclarations = [];
}
for (var _d = 0, loopOutParameters_1 = loopOutParameters; _d < loopOutParameters_1.length; _d++) {
var outParam = loopOutParameters_1[_d];
extraVariableDeclarations.push(ts.createVariableDeclaration(outParam.outParamName));
}
}
if (extraVariableDeclarations) {
statements.push(ts.createVariableStatement(undefined, ts.createVariableDeclarationList(extraVariableDeclarations)));
}
var convertedLoopBodyStatements = generateCallToConvertedLoop(functionName, loopParameters, currentState, containsYield);
var loop;
if (convert) {
loop = convert(node, outermostLabeledStatement, convertedLoopBodyStatements);
}
else {
var clone_3 = ts.getMutableClone(node);
clone_3.statement = undefined;
clone_3 = ts.visitEachChild(clone_3, visitor, context);
clone_3.statement = ts.createBlock(convertedLoopBodyStatements, true);
clone_3.transformFlags = 0;
ts.aggregateTransformFlags(clone_3);
loop = ts.restoreEnclosingLabel(clone_3, outermostLabeledStatement, convertedLoopState && resetLabel);
}
statements.push(loop);
return statements;
}
function copyOutParameter(outParam, copyDirection) {
var source = copyDirection === 0 ? outParam.outParamName : outParam.originalName;
var target = copyDirection === 0 ? outParam.originalName : outParam.outParamName;
return ts.createBinary(target, 58, source);
}
function copyOutParameters(outParams, copyDirection, statements) {
for (var _i = 0, outParams_1 = outParams; _i < outParams_1.length; _i++) {
var outParam = outParams_1[_i];
statements.push(ts.createStatement(copyOutParameter(outParam, copyDirection)));
}
}
function generateCallToConvertedLoop(loopFunctionExpressionName, parameters, state, isAsyncBlockContainingAwait) {
var outerConvertedLoopState = convertedLoopState;
var statements = [];
var isSimpleLoop = !(state.nonLocalJumps & ~4) &&
!state.labeledNonLocalBreaks &&
!state.labeledNonLocalContinues;
var call = ts.createCall(loopFunctionExpressionName, undefined, ts.map(parameters, function (p) { return p.name; }));
var callResult = isAsyncBlockContainingAwait
? ts.createYield(ts.createToken(39), ts.setEmitFlags(call, 8388608))
: call;
if (isSimpleLoop) {
statements.push(ts.createStatement(callResult));
copyOutParameters(state.loopOutParameters, 0, statements);
}
else {
var loopResultName = ts.createUniqueName("state");
var stateVariable = ts.createVariableStatement(undefined, ts.createVariableDeclarationList([ts.createVariableDeclaration(loopResultName, undefined, callResult)]));
statements.push(stateVariable);
copyOutParameters(state.loopOutParameters, 0, statements);
if (state.nonLocalJumps & 8) {
var returnStatement = void 0;
if (outerConvertedLoopState) {
outerConvertedLoopState.nonLocalJumps |= 8;
returnStatement = ts.createReturn(loopResultName);
}
else {
returnStatement = ts.createReturn(ts.createPropertyAccess(loopResultName, "value"));
}
statements.push(ts.createIf(ts.createBinary(ts.createTypeOf(loopResultName), 34, ts.createLiteral("object")), returnStatement));
}
if (state.nonLocalJumps & 2) {
statements.push(ts.createIf(ts.createBinary(loopResultName, 34, ts.createLiteral("break")), ts.createBreak()));
}
if (state.labeledNonLocalBreaks || state.labeledNonLocalContinues) {
var caseClauses = [];
processLabeledJumps(state.labeledNonLocalBreaks, true, loopResultName, outerConvertedLoopState, caseClauses);
processLabeledJumps(state.labeledNonLocalContinues, false, loopResultName, outerConvertedLoopState, caseClauses);
statements.push(ts.createSwitch(loopResultName, ts.createCaseBlock(caseClauses)));
}
}
return statements;
}
function setLabeledJump(state, isBreak, labelText, labelMarker) {
if (isBreak) {
if (!state.labeledNonLocalBreaks) {
state.labeledNonLocalBreaks = ts.createMap();
}
state.labeledNonLocalBreaks.set(labelText, labelMarker);
}
else {
if (!state.labeledNonLocalContinues) {
state.labeledNonLocalContinues = ts.createMap();
}
state.labeledNonLocalContinues.set(labelText, labelMarker);
}
}
function processLabeledJumps(table, isBreak, loopResultName, outerLoop, caseClauses) {
if (!table) {
return;
}
table.forEach(function (labelMarker, labelText) {
var statements = [];
if (!outerLoop || (outerLoop.labels && outerLoop.labels.get(labelText))) {
var label = ts.createIdentifier(labelText);
statements.push(isBreak ? ts.createBreak(label) : ts.createContinue(label));
}
else {
setLabeledJump(outerLoop, isBreak, labelText, labelMarker);
statements.push(ts.createReturn(loopResultName));
}
caseClauses.push(ts.createCaseClause(ts.createLiteral(labelMarker), statements));
});
}
function processLoopVariableDeclaration(decl, loopParameters, loopOutParameters) {
var name = decl.name;
if (ts.isBindingPattern(name)) {
for (var _i = 0, _a = name.elements; _i < _a.length; _i++) {
var element = _a[_i];
if (!ts.isOmittedExpression(element)) {
processLoopVariableDeclaration(element, loopParameters, loopOutParameters);
}
}
}
else {
loopParameters.push(ts.createParameter(undefined, undefined, undefined, name));
if (resolver.getNodeCheckFlags(decl) & 2097152) {
var outParamName = ts.createUniqueName("out_" + ts.idText(name));
loopOutParameters.push({ originalName: name, outParamName: outParamName });
}
}
}
function addObjectLiteralMembers(expressions, node, receiver, start) {
var properties = node.properties;
var numProperties = properties.length;
for (var i = start; i < numProperties; i++) {
var property = properties[i];
switch (property.kind) {
case 153:
case 154:
var accessors = ts.getAllAccessorDeclarations(node.properties, property);
if (property === accessors.firstAccessor) {
expressions.push(transformAccessorsToExpression(receiver, accessors, node, node.multiLine));
}
break;
case 151:
expressions.push(transformObjectLiteralMethodDeclarationToExpression(property, receiver, node, node.multiLine));
break;
case 261:
expressions.push(transformPropertyAssignmentToExpression(property, receiver, node.multiLine));
break;
case 262:
expressions.push(transformShorthandPropertyAssignmentToExpression(property, receiver, node.multiLine));
break;
default:
ts.Debug.failBadSyntaxKind(node);
break;
}
}
}
function transformPropertyAssignmentToExpression(property, receiver, startsOnNewLine) {
var expression = ts.createAssignment(ts.createMemberAccessForPropertyName(receiver, ts.visitNode(property.name, visitor, ts.isPropertyName)), ts.visitNode(property.initializer, visitor, ts.isExpression));
ts.setTextRange(expression, property);
if (startsOnNewLine) {
expression.startsOnNewLine = true;
}
return expression;
}
function transformShorthandPropertyAssignmentToExpression(property, receiver, startsOnNewLine) {
var expression = ts.createAssignment(ts.createMemberAccessForPropertyName(receiver, ts.visitNode(property.name, visitor, ts.isPropertyName)), ts.getSynthesizedClone(property.name));
ts.setTextRange(expression, property);
if (startsOnNewLine) {
expression.startsOnNewLine = true;
}
return expression;
}
function transformObjectLiteralMethodDeclarationToExpression(method, receiver, container, startsOnNewLine) {
var ancestorFacts = enterSubtree(0, 0);
var expression = ts.createAssignment(ts.createMemberAccessForPropertyName(receiver, ts.visitNode(method.name, visitor, ts.isPropertyName)), transformFunctionLikeToExpression(method, method, undefined, container));
ts.setTextRange(expression, method);
if (startsOnNewLine) {
expression.startsOnNewLine = true;
}
exitSubtree(ancestorFacts, 49152, hierarchyFacts & 49152 ? 16384 : 0);
return expression;
}
function visitCatchClause(node) {
var ancestorFacts = enterSubtree(4032, 0);
var updated;
ts.Debug.assert(!!node.variableDeclaration, "Catch clause variable should always be present when downleveling ES2015.");
if (ts.isBindingPattern(node.variableDeclaration.name)) {
var temp = ts.createTempVariable(undefined);
var newVariableDeclaration = ts.createVariableDeclaration(temp);
ts.setTextRange(newVariableDeclaration, node.variableDeclaration);
var vars = ts.flattenDestructuringBinding(node.variableDeclaration, visitor, context, 0, temp);
var list = ts.createVariableDeclarationList(vars);
ts.setTextRange(list, node.variableDeclaration);
var destructure = ts.createVariableStatement(undefined, list);
updated = ts.updateCatchClause(node, newVariableDeclaration, addStatementToStartOfBlock(node.block, destructure));
}
else {
updated = ts.visitEachChild(node, visitor, context);
}
exitSubtree(ancestorFacts, 0, 0);
return updated;
}
function addStatementToStartOfBlock(block, statement) {
var transformedStatements = ts.visitNodes(block.statements, visitor, ts.isStatement);
return ts.updateBlock(block, [statement].concat(transformedStatements));
}
function visitMethodDeclaration(node) {
ts.Debug.assert(!ts.isComputedPropertyName(node.name));
var functionExpression = transformFunctionLikeToExpression(node, ts.moveRangePos(node, -1), undefined, undefined);
ts.setEmitFlags(functionExpression, 512 | ts.getEmitFlags(functionExpression));
return ts.setTextRange(ts.createPropertyAssignment(node.name, functionExpression), node);
}
function visitAccessorDeclaration(node) {
ts.Debug.assert(!ts.isComputedPropertyName(node.name));
var savedConvertedLoopState = convertedLoopState;
convertedLoopState = undefined;
var ancestorFacts = enterSubtree(16286, 65);
var updated;
if (node.transformFlags & 32768) {
var parameters = ts.visitParameterList(node.parameters, visitor, context);
var body = transformFunctionBody(node);
if (node.kind === 153) {
updated = ts.updateGetAccessor(node, node.decorators, node.modifiers, node.name, parameters, node.type, body);
}
else {
updated = ts.updateSetAccessor(node, node.decorators, node.modifiers, node.name, parameters, body);
}
}
else {
updated = ts.visitEachChild(node, visitor, context);
}
exitSubtree(ancestorFacts, 49152, 0);
convertedLoopState = savedConvertedLoopState;
return updated;
}
function visitShorthandPropertyAssignment(node) {
return ts.setTextRange(ts.createPropertyAssignment(node.name, ts.getSynthesizedClone(node.name)), node);
}
function visitComputedPropertyName(node) {
var ancestorFacts = enterSubtree(0, 8192);
var updated = ts.visitEachChild(node, visitor, context);
exitSubtree(ancestorFacts, 49152, hierarchyFacts & 49152 ? 32768 : 0);
return updated;
}
function visitYieldExpression(node) {
return ts.visitEachChild(node, visitor, context);
}
function visitArrayLiteralExpression(node) {
if (node.transformFlags & 64) {
return transformAndSpreadElements(node.elements, true, node.multiLine, node.elements.hasTrailingComma);
}
return ts.visitEachChild(node, visitor, context);
}
function visitCallExpression(node) {
if (ts.getEmitFlags(node) & 33554432) {
return visitTypeScriptClassWrapper(node);
}
if (node.transformFlags & 64) {
return visitCallExpressionWithPotentialCapturedThisAssignment(node, true);
}
return ts.updateCall(node, ts.visitNode(node.expression, callExpressionVisitor, ts.isExpression), undefined, ts.visitNodes(node.arguments, visitor, ts.isExpression));
}
function visitTypeScriptClassWrapper(node) {
var body = ts.cast(ts.cast(ts.skipOuterExpressions(node.expression), ts.isArrowFunction).body, ts.isBlock);
var classStatements = ts.visitNodes(body.statements, visitor, ts.isStatement, 0, 1);
var remainingStatements = ts.visitNodes(body.statements, visitor, ts.isStatement, 1, body.statements.length - 1);
var varStatement = ts.cast(ts.firstOrUndefined(classStatements), ts.isVariableStatement);
var variable = varStatement.declarationList.declarations[0];
var initializer = ts.skipOuterExpressions(variable.initializer);
var aliasAssignment = ts.tryCast(initializer, ts.isAssignmentExpression);
var call = ts.cast(aliasAssignment ? ts.skipOuterExpressions(aliasAssignment.right) : initializer, ts.isCallExpression);
var func = ts.cast(ts.skipOuterExpressions(call.expression), ts.isFunctionExpression);
var funcStatements = func.body.statements;
var classBodyStart = 0;
var classBodyEnd = -1;
var statements = [];
if (aliasAssignment) {
var extendsCall = ts.tryCast(funcStatements[classBodyStart], ts.isExpressionStatement);
if (extendsCall) {
statements.push(extendsCall);
classBodyStart++;
}
statements.push(funcStatements[classBodyStart]);
classBodyStart++;
statements.push(ts.createStatement(ts.createAssignment(aliasAssignment.left, ts.cast(variable.name, ts.isIdentifier))));
}
while (!ts.isReturnStatement(ts.elementAt(funcStatements, classBodyEnd))) {
classBodyEnd--;
}
ts.addRange(statements, funcStatements, classBodyStart, classBodyEnd);
if (classBodyEnd < -1) {
ts.addRange(statements, funcStatements, classBodyEnd + 1);
}
ts.addRange(statements, remainingStatements);
ts.addRange(statements, classStatements, 1);
return ts.recreateOuterExpressions(node.expression, ts.recreateOuterExpressions(variable.initializer, ts.recreateOuterExpressions(aliasAssignment && aliasAssignment.right, ts.updateCall(call, ts.recreateOuterExpressions(call.expression, ts.updateFunctionExpression(func, undefined, undefined, undefined, undefined, func.parameters, undefined, ts.updateBlock(func.body, statements))), undefined, call.arguments))));
}
function visitImmediateSuperCallInBody(node) {
return visitCallExpressionWithPotentialCapturedThisAssignment(node, false);
}
function visitCallExpressionWithPotentialCapturedThisAssignment(node, assignToCapturedThis) {
var _a = ts.createCallBinding(node.expression, hoistVariableDeclaration), target = _a.target, thisArg = _a.thisArg;
if (node.expression.kind === 97) {
ts.setEmitFlags(thisArg, 4);
}
var resultingCall;
if (node.transformFlags & 524288) {
resultingCall = ts.createFunctionApply(ts.visitNode(target, callExpressionVisitor, ts.isExpression), ts.visitNode(thisArg, visitor, ts.isExpression), transformAndSpreadElements(node.arguments, false, false, false));
}
else {
resultingCall = ts.createFunctionCall(ts.visitNode(target, callExpressionVisitor, ts.isExpression), ts.visitNode(thisArg, visitor, ts.isExpression), ts.visitNodes(node.arguments, visitor, ts.isExpression), node);
}
if (node.expression.kind === 97) {
var actualThis = ts.createThis();
ts.setEmitFlags(actualThis, 4);
var initializer = ts.createLogicalOr(resultingCall, actualThis);
resultingCall = assignToCapturedThis
? ts.createAssignment(ts.createIdentifier("_this"), initializer)
: initializer;
}
return ts.setOriginalNode(resultingCall, node);
}
function visitNewExpression(node) {
if (node.transformFlags & 524288) {
var _a = ts.createCallBinding(ts.createPropertyAccess(node.expression, "bind"), hoistVariableDeclaration), target = _a.target, thisArg = _a.thisArg;
return ts.createNew(ts.createFunctionApply(ts.visitNode(target, visitor, ts.isExpression), thisArg, transformAndSpreadElements(ts.createNodeArray([ts.createVoidZero()].concat(node.arguments)), false, false, false)), undefined, []);
}
return ts.visitEachChild(node, visitor, context);
}
function transformAndSpreadElements(elements, needsUniqueCopy, multiLine, hasTrailingComma) {
var numElements = elements.length;
var segments = ts.flatten(ts.spanMap(elements, partitionSpread, function (partition, visitPartition, _start, end) {
return visitPartition(partition, multiLine, hasTrailingComma && end === numElements);
}));
if (compilerOptions.downlevelIteration) {
if (segments.length === 1) {
var firstSegment = segments[0];
if (ts.isCallExpression(firstSegment)
&& ts.isIdentifier(firstSegment.expression)
&& (ts.getEmitFlags(firstSegment.expression) & 4096)
&& firstSegment.expression.escapedText === "___spread") {
return segments[0];
}
}
return ts.createSpreadHelper(context, segments);
}
else {
if (segments.length === 1) {
var firstElement = elements[0];
return needsUniqueCopy && ts.isSpreadElement(firstElement) && firstElement.expression.kind !== 177
? ts.createArraySlice(segments[0])
: segments[0];
}
return ts.createArrayConcat(segments.shift(), segments);
}
}
function partitionSpread(node) {
return ts.isSpreadElement(node)
? visitSpanOfSpreads
: visitSpanOfNonSpreads;
}
function visitSpanOfSpreads(chunk) {
return ts.map(chunk, visitExpressionOfSpread);
}
function visitSpanOfNonSpreads(chunk, multiLine, hasTrailingComma) {
return ts.createArrayLiteral(ts.visitNodes(ts.createNodeArray(chunk, hasTrailingComma), visitor, ts.isExpression), multiLine);
}
function visitSpreadElement(node) {
return ts.visitNode(node.expression, visitor, ts.isExpression);
}
function visitExpressionOfSpread(node) {
return ts.visitNode(node.expression, visitor, ts.isExpression);
}
function visitTemplateLiteral(node) {
return ts.setTextRange(ts.createLiteral(node.text), node);
}
function visitStringLiteral(node) {
if (node.hasExtendedUnicodeEscape) {
return ts.setTextRange(ts.createLiteral(node.text), node);
}
return node;
}
function visitNumericLiteral(node) {
if (node.numericLiteralFlags & 48) {
return ts.setTextRange(ts.createNumericLiteral(node.text), node);
}
return node;
}
function visitTaggedTemplateExpression(node) {
var tag = ts.visitNode(node.tag, visitor, ts.isExpression);
var templateArguments = [undefined];
var cookedStrings = [];
var rawStrings = [];
var template = node.template;
if (ts.isNoSubstitutionTemplateLiteral(template)) {
cookedStrings.push(ts.createLiteral(template.text));
rawStrings.push(getRawLiteral(template));
}
else {
cookedStrings.push(ts.createLiteral(template.head.text));
rawStrings.push(getRawLiteral(template.head));
for (var _i = 0, _a = template.templateSpans; _i < _a.length; _i++) {
var templateSpan = _a[_i];
cookedStrings.push(ts.createLiteral(templateSpan.literal.text));
rawStrings.push(getRawLiteral(templateSpan.literal));
templateArguments.push(ts.visitNode(templateSpan.expression, visitor, ts.isExpression));
}
}
var helperCall = createTemplateObjectHelper(context, ts.createArrayLiteral(cookedStrings), ts.createArrayLiteral(rawStrings));
if (ts.isExternalModule(currentSourceFile)) {
var tempVar = ts.createUniqueName("templateObject");
recordTaggedTemplateString(tempVar);
templateArguments[0] = ts.createLogicalOr(tempVar, ts.createAssignment(tempVar, helperCall));
}
else {
templateArguments[0] = helperCall;
}
return ts.createCall(tag, undefined, templateArguments);
}
function getRawLiteral(node) {
var text = ts.getSourceTextOfNodeFromSourceFile(currentSourceFile, node);
var isLast = node.kind === 13 || node.kind === 16;
text = text.substring(1, text.length - (isLast ? 1 : 2));
text = text.replace(/\r\n?/g, "\n");
return ts.setTextRange(ts.createLiteral(text), node);
}
function visitTemplateExpression(node) {
var expressions = [];
addTemplateHead(expressions, node);
addTemplateSpans(expressions, node);
var expression = ts.reduceLeft(expressions, ts.createAdd);
if (ts.nodeIsSynthesized(expression)) {
expression.pos = node.pos;
expression.end = node.end;
}
return expression;
}
function shouldAddTemplateHead(node) {
ts.Debug.assert(node.templateSpans.length !== 0);
return node.head.text.length !== 0 || node.templateSpans[0].literal.text.length === 0;
}
function addTemplateHead(expressions, node) {
if (!shouldAddTemplateHead(node)) {
return;
}
expressions.push(ts.createLiteral(node.head.text));
}
function addTemplateSpans(expressions, node) {
for (var _i = 0, _a = node.templateSpans; _i < _a.length; _i++) {
var span_6 = _a[_i];
expressions.push(ts.visitNode(span_6.expression, visitor, ts.isExpression));
if (span_6.literal.text.length !== 0) {
expressions.push(ts.createLiteral(span_6.literal.text));
}
}
}
function visitSuperKeyword(isExpressionOfCall) {
return hierarchyFacts & 8
&& !isExpressionOfCall
? ts.createPropertyAccess(ts.createIdentifier("_super"), "prototype")
: ts.createIdentifier("_super");
}
function visitMetaProperty(node) {
if (node.keywordToken === 94 && node.name.escapedText === "target") {
if (hierarchyFacts & 8192) {
hierarchyFacts |= 32768;
}
else {
hierarchyFacts |= 16384;
}
return ts.createIdentifier("_newTarget");
}
return node;
}
function onEmitNode(hint, node, emitCallback) {
if (enabledSubstitutions & 1 && ts.isFunctionLike(node)) {
var ancestorFacts = enterSubtree(16286, ts.getEmitFlags(node) & 8
? 65 | 16
: 65);
previousOnEmitNode(hint, node, emitCallback);
exitSubtree(ancestorFacts, 0, 0);
return;
}
previousOnEmitNode(hint, node, emitCallback);
}
function enableSubstitutionsForBlockScopedBindings() {
if ((enabledSubstitutions & 2) === 0) {
enabledSubstitutions |= 2;
context.enableSubstitution(71);
}
}
function enableSubstitutionsForCapturedThis() {
if ((enabledSubstitutions & 1) === 0) {
enabledSubstitutions |= 1;
context.enableSubstitution(99);
context.enableEmitNotification(152);
context.enableEmitNotification(151);
context.enableEmitNotification(153);
context.enableEmitNotification(154);
context.enableEmitNotification(187);
context.enableEmitNotification(186);
context.enableEmitNotification(228);
}
}
function onSubstituteNode(hint, node) {
node = previousOnSubstituteNode(hint, node);
if (hint === 1) {
return substituteExpression(node);
}
if (ts.isIdentifier(node)) {
return substituteIdentifier(node);
}
return node;
}
function substituteIdentifier(node) {
if (enabledSubstitutions & 2 && !ts.isInternalName(node)) {
var original = ts.getParseTreeNode(node, ts.isIdentifier);
if (original && isNameOfDeclarationWithCollidingName(original)) {
return ts.setTextRange(ts.getGeneratedNameForNode(original), node);
}
}
return node;
}
function isNameOfDeclarationWithCollidingName(node) {
var parent = node.parent;
switch (parent.kind) {
case 176:
case 229:
case 232:
case 226:
return parent.name === node
&& resolver.isDeclarationWithCollidingName(parent);
}
return false;
}
function substituteExpression(node) {
switch (node.kind) {
case 71:
return substituteExpressionIdentifier(node);
case 99:
return substituteThisKeyword(node);
}
return node;
}
function substituteExpressionIdentifier(node) {
if (enabledSubstitutions & 2 && !ts.isInternalName(node)) {
var declaration = resolver.getReferencedDeclarationWithCollidingName(node);
if (declaration && !(ts.isClassLike(declaration) && isPartOfClassBody(declaration, node))) {
return ts.setTextRange(ts.getGeneratedNameForNode(ts.getNameOfDeclaration(declaration)), node);
}
}
return node;
}
function isPartOfClassBody(declaration, node) {
var currentNode = ts.getParseTreeNode(node);
if (!currentNode || currentNode === declaration || currentNode.end <= declaration.pos || currentNode.pos >= declaration.end) {
return false;
}
var blockScope = ts.getEnclosingBlockScopeContainer(declaration);
while (currentNode) {
if (currentNode === blockScope || currentNode === declaration) {
return false;
}
if (ts.isClassElement(currentNode) && currentNode.parent === declaration) {
return true;
}
currentNode = currentNode.parent;
}
return false;
}
function substituteThisKeyword(node) {
if (enabledSubstitutions & 1
&& hierarchyFacts & 16) {
return ts.setTextRange(ts.createIdentifier("_this"), node);
}
return node;
}
function getClassMemberPrefix(node, member) {
return ts.hasModifier(member, 32)
? ts.getInternalName(node)
: ts.createPropertyAccess(ts.getInternalName(node), "prototype");
}
function hasSynthesizedDefaultSuperCall(constructor, hasExtendsClause) {
if (!constructor || !hasExtendsClause) {
return false;
}
if (ts.some(constructor.parameters)) {
return false;
}
var statement = ts.firstOrUndefined(constructor.body.statements);
if (!statement || !ts.nodeIsSynthesized(statement) || statement.kind !== 210) {
return false;
}
var statementExpression = statement.expression;
if (!ts.nodeIsSynthesized(statementExpression) || statementExpression.kind !== 181) {
return false;
}
var callTarget = statementExpression.expression;
if (!ts.nodeIsSynthesized(callTarget) || callTarget.kind !== 97) {
return false;
}
var callArgument = ts.singleOrUndefined(statementExpression.arguments);
if (!callArgument || !ts.nodeIsSynthesized(callArgument) || callArgument.kind !== 198) {
return false;
}
var expression = callArgument.expression;
return ts.isIdentifier(expression) && expression.escapedText === "arguments";
}
}
ts.transformES2015 = transformES2015;
function createExtendsHelper(context, name) {
context.requestEmitHelper(extendsHelper);
return ts.createCall(ts.getHelperName("__extends"), undefined, [
name,
ts.createIdentifier("_super")
]);
}
function createTemplateObjectHelper(context, cooked, raw) {
context.requestEmitHelper(templateObjectHelper);
return ts.createCall(ts.getHelperName("__makeTemplateObject"), undefined, [
cooked,
raw
]);
}
var extendsHelper = {
name: "typescript:extends",
scoped: false,
priority: 0,
text: "\n var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n })();"
};
var templateObjectHelper = {
name: "typescript:makeTemplateObject",
scoped: false,
priority: 0,
text: "\n var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n };"
};
})(ts || (ts = {}));
var ts;
(function (ts) {
function transformES5(context) {
var compilerOptions = context.getCompilerOptions();
var previousOnEmitNode;
var noSubstitution;
if (compilerOptions.jsx === 1 || compilerOptions.jsx === 3) {
previousOnEmitNode = context.onEmitNode;
context.onEmitNode = onEmitNode;
context.enableEmitNotification(251);
context.enableEmitNotification(252);
context.enableEmitNotification(250);
noSubstitution = [];
}
var previousOnSubstituteNode = context.onSubstituteNode;
context.onSubstituteNode = onSubstituteNode;
context.enableSubstitution(179);
context.enableSubstitution(261);
return transformSourceFile;
function transformSourceFile(node) {
return node;
}
function onEmitNode(hint, node, emitCallback) {
switch (node.kind) {
case 251:
case 252:
case 250:
var tagName = node.tagName;
noSubstitution[ts.getOriginalNodeId(tagName)] = true;
break;
}
previousOnEmitNode(hint, node, emitCallback);
}
function onSubstituteNode(hint, node) {
if (node.id && noSubstitution && noSubstitution[node.id]) {
return previousOnSubstituteNode(hint, node);
}
node = previousOnSubstituteNode(hint, node);
if (ts.isPropertyAccessExpression(node)) {
return substitutePropertyAccessExpression(node);
}
else if (ts.isPropertyAssignment(node)) {
return substitutePropertyAssignment(node);
}
return node;
}
function substitutePropertyAccessExpression(node) {
var literalName = trySubstituteReservedName(node.name);
if (literalName) {
return ts.setTextRange(ts.createElementAccess(node.expression, literalName), node);
}
return node;
}
function substitutePropertyAssignment(node) {
var literalName = ts.isIdentifier(node.name) && trySubstituteReservedName(node.name);
if (literalName) {
return ts.updatePropertyAssignment(node, literalName, node.initializer);
}
return node;
}
function trySubstituteReservedName(name) {
var token = name.originalKeywordKind || (ts.nodeIsSynthesized(name) ? ts.stringToToken(ts.idText(name)) : undefined);
if (token >= 72 && token <= 107) {
return ts.setTextRange(ts.createLiteral(name), name);
}
return undefined;
}
}
ts.transformES5 = transformES5;
})(ts || (ts = {}));
var ts;
(function (ts) {
function getInstructionName(instruction) {
switch (instruction) {
case 2: return "return";
case 3: return "break";
case 4: return "yield";
case 5: return "yield*";
case 7: return "endfinally";
}
}
function transformGenerators(context) {
var resumeLexicalEnvironment = context.resumeLexicalEnvironment, endLexicalEnvironment = context.endLexicalEnvironment, hoistFunctionDeclaration = context.hoistFunctionDeclaration, hoistVariableDeclaration = context.hoistVariableDeclaration;
var compilerOptions = context.getCompilerOptions();
var languageVersion = ts.getEmitScriptTarget(compilerOptions);
var resolver = context.getEmitResolver();
var previousOnSubstituteNode = context.onSubstituteNode;
context.onSubstituteNode = onSubstituteNode;
var renamedCatchVariables;
var renamedCatchVariableDeclarations;
var inGeneratorFunctionBody;
var inStatementContainingYield;
var blocks;
var blockOffsets;
var blockActions;
var blockStack;
var labelOffsets;
var labelExpressions;
var nextLabelId = 1;
var operations;
var operationArguments;
var operationLocations;
var state;
var blockIndex = 0;
var labelNumber = 0;
var labelNumbers;
var lastOperationWasAbrupt;
var lastOperationWasCompletion;
var clauses;
var statements;
var exceptionBlockStack;
var currentExceptionBlock;
var withBlockStack;
return transformSourceFile;
function transformSourceFile(node) {
if (node.isDeclarationFile || (node.transformFlags & 512) === 0) {
return node;
}
var visited = ts.visitEachChild(node, visitor, context);
ts.addEmitHelpers(visited, context.readEmitHelpers());
return visited;
}
function visitor(node) {
var transformFlags = node.transformFlags;
if (inStatementContainingYield) {
return visitJavaScriptInStatementContainingYield(node);
}
else if (inGeneratorFunctionBody) {
return visitJavaScriptInGeneratorFunctionBody(node);
}
else if (transformFlags & 256) {
return visitGenerator(node);
}
else if (transformFlags & 512) {
return ts.visitEachChild(node, visitor, context);
}
else {
return node;
}
}
function visitJavaScriptInStatementContainingYield(node) {
switch (node.kind) {
case 212:
return visitDoStatement(node);
case 213:
return visitWhileStatement(node);
case 221:
return visitSwitchStatement(node);
case 222:
return visitLabeledStatement(node);
default:
return visitJavaScriptInGeneratorFunctionBody(node);
}
}
function visitJavaScriptInGeneratorFunctionBody(node) {
switch (node.kind) {
case 228:
return visitFunctionDeclaration(node);
case 186:
return visitFunctionExpression(node);
case 153:
case 154:
return visitAccessorDeclaration(node);
case 208:
return visitVariableStatement(node);
case 214:
return visitForStatement(node);
case 215:
return visitForInStatement(node);
case 218:
return visitBreakStatement(node);
case 217:
return visitContinueStatement(node);
case 219:
return visitReturnStatement(node);
default:
if (node.transformFlags & 16777216) {
return visitJavaScriptContainingYield(node);
}
else if (node.transformFlags & (512 | 33554432)) {
return ts.visitEachChild(node, visitor, context);
}
else {
return node;
}
}
}
function visitJavaScriptContainingYield(node) {
switch (node.kind) {
case 194:
return visitBinaryExpression(node);
case 195:
return visitConditionalExpression(node);
case 197:
return visitYieldExpression(node);
case 177:
return visitArrayLiteralExpression(node);
case 178:
return visitObjectLiteralExpression(node);
case 180:
return visitElementAccessExpression(node);
case 181:
return visitCallExpression(node);
case 182:
return visitNewExpression(node);
default:
return ts.visitEachChild(node, visitor, context);
}
}
function visitGenerator(node) {
switch (node.kind) {
case 228:
return visitFunctionDeclaration(node);
case 186:
return visitFunctionExpression(node);
default:
ts.Debug.failBadSyntaxKind(node);
return ts.visitEachChild(node, visitor, context);
}
}
function visitFunctionDeclaration(node) {
if (node.asteriskToken) {
node = ts.setOriginalNode(ts.setTextRange(ts.createFunctionDeclaration(undefined, node.modifiers, undefined, node.name, undefined, ts.visitParameterList(node.parameters, visitor, context), undefined, transformGeneratorFunctionBody(node.body)), node), node);
}
else {
var savedInGeneratorFunctionBody = inGeneratorFunctionBody;
var savedInStatementContainingYield = inStatementContainingYield;
inGeneratorFunctionBody = false;
inStatementContainingYield = false;
node = ts.visitEachChild(node, visitor, context);
inGeneratorFunctionBody = savedInGeneratorFunctionBody;
inStatementContainingYield = savedInStatementContainingYield;
}
if (inGeneratorFunctionBody) {
hoistFunctionDeclaration(node);
return undefined;
}
else {
return node;
}
}
function visitFunctionExpression(node) {
if (node.asteriskToken) {
node = ts.setOriginalNode(ts.setTextRange(ts.createFunctionExpression(undefined, undefined, node.name, undefined, ts.visitParameterList(node.parameters, visitor, context), undefined, transformGeneratorFunctionBody(node.body)), node), node);
}
else {
var savedInGeneratorFunctionBody = inGeneratorFunctionBody;
var savedInStatementContainingYield = inStatementContainingYield;
inGeneratorFunctionBody = false;
inStatementContainingYield = false;
node = ts.visitEachChild(node, visitor, context);
inGeneratorFunctionBody = savedInGeneratorFunctionBody;
inStatementContainingYield = savedInStatementContainingYield;
}
return node;
}
function visitAccessorDeclaration(node) {
var savedInGeneratorFunctionBody = inGeneratorFunctionBody;
var savedInStatementContainingYield = inStatementContainingYield;
inGeneratorFunctionBody = false;
inStatementContainingYield = false;
node = ts.visitEachChild(node, visitor, context);
inGeneratorFunctionBody = savedInGeneratorFunctionBody;
inStatementContainingYield = savedInStatementContainingYield;
return node;
}
function transformGeneratorFunctionBody(body) {
var statements = [];
var savedInGeneratorFunctionBody = inGeneratorFunctionBody;
var savedInStatementContainingYield = inStatementContainingYield;
var savedBlocks = blocks;
var savedBlockOffsets = blockOffsets;
var savedBlockActions = blockActions;
var savedBlockStack = blockStack;
var savedLabelOffsets = labelOffsets;
var savedLabelExpressions = labelExpressions;
var savedNextLabelId = nextLabelId;
var savedOperations = operations;
var savedOperationArguments = operationArguments;
var savedOperationLocations = operationLocations;
var savedState = state;
inGeneratorFunctionBody = true;
inStatementContainingYield = false;
blocks = undefined;
blockOffsets = undefined;
blockActions = undefined;
blockStack = undefined;
labelOffsets = undefined;
labelExpressions = undefined;
nextLabelId = 1;
operations = undefined;
operationArguments = undefined;
operationLocations = undefined;
state = ts.createTempVariable(undefined);
resumeLexicalEnvironment();
var statementOffset = ts.addPrologue(statements, body.statements, false, visitor);
transformAndEmitStatements(body.statements, statementOffset);
var buildResult = build();
ts.addRange(statements, endLexicalEnvironment());
statements.push(ts.createReturn(buildResult));
inGeneratorFunctionBody = savedInGeneratorFunctionBody;
inStatementContainingYield = savedInStatementContainingYield;
blocks = savedBlocks;
blockOffsets = savedBlockOffsets;
blockActions = savedBlockActions;
blockStack = savedBlockStack;
labelOffsets = savedLabelOffsets;
labelExpressions = savedLabelExpressions;
nextLabelId = savedNextLabelId;
operations = savedOperations;
operationArguments = savedOperationArguments;
operationLocations = savedOperationLocations;
state = savedState;
return ts.setTextRange(ts.createBlock(statements, body.multiLine), body);
}
function visitVariableStatement(node) {
if (node.transformFlags & 16777216) {
transformAndEmitVariableDeclarationList(node.declarationList);
return undefined;
}
else {
if (ts.getEmitFlags(node) & 1048576) {
return node;
}
for (var _i = 0, _a = node.declarationList.declarations; _i < _a.length; _i++) {
var variable = _a[_i];
hoistVariableDeclaration(variable.name);
}
var variables = ts.getInitializedVariables(node.declarationList);
if (variables.length === 0) {
return undefined;
}
return ts.setSourceMapRange(ts.createStatement(ts.inlineExpressions(ts.map(variables, transformInitializedVariable))), node);
}
}
function visitBinaryExpression(node) {
switch (ts.getExpressionAssociativity(node)) {
case 0:
return visitLeftAssociativeBinaryExpression(node);
case 1:
return visitRightAssociativeBinaryExpression(node);
default:
ts.Debug.fail("Unknown associativity.");
}
}
function isCompoundAssignment(kind) {
return kind >= 59
&& kind <= 70;
}
function getOperatorForCompoundAssignment(kind) {
switch (kind) {
case 59: return 37;
case 60: return 38;
case 61: return 39;
case 62: return 40;
case 63: return 41;
case 64: return 42;
case 65: return 45;
case 66: return 46;
case 67: return 47;
case 68: return 48;
case 69: return 49;
case 70: return 50;
}
}
function visitRightAssociativeBinaryExpression(node) {
var left = node.left, right = node.right;
if (containsYield(right)) {
var target = void 0;
switch (left.kind) {
case 179:
target = ts.updatePropertyAccess(left, cacheExpression(ts.visitNode(left.expression, visitor, ts.isLeftHandSideExpression)), left.name);
break;
case 180:
target = ts.updateElementAccess(left, cacheExpression(ts.visitNode(left.expression, visitor, ts.isLeftHandSideExpression)), cacheExpression(ts.visitNode(left.argumentExpression, visitor, ts.isExpression)));
break;
default:
target = ts.visitNode(left, visitor, ts.isExpression);
break;
}
var operator = node.operatorToken.kind;
if (isCompoundAssignment(operator)) {
return ts.setTextRange(ts.createAssignment(target, ts.setTextRange(ts.createBinary(cacheExpression(target), getOperatorForCompoundAssignment(operator), ts.visitNode(right, visitor, ts.isExpression)), node)), node);
}
else {
return ts.updateBinary(node, target, ts.visitNode(right, visitor, ts.isExpression));
}
}
return ts.visitEachChild(node, visitor, context);
}
function visitLeftAssociativeBinaryExpression(node) {
if (containsYield(node.right)) {
if (ts.isLogicalOperator(node.operatorToken.kind)) {
return visitLogicalBinaryExpression(node);
}
else if (node.operatorToken.kind === 26) {
return visitCommaExpression(node);
}
var clone_4 = ts.getMutableClone(node);
clone_4.left = cacheExpression(ts.visitNode(node.left, visitor, ts.isExpression));
clone_4.right = ts.visitNode(node.right, visitor, ts.isExpression);
return clone_4;
}
return ts.visitEachChild(node, visitor, context);
}
function visitLogicalBinaryExpression(node) {
var resultLabel = defineLabel();
var resultLocal = declareLocal();
emitAssignment(resultLocal, ts.visitNode(node.left, visitor, ts.isExpression), node.left);
if (node.operatorToken.kind === 53) {
emitBreakWhenFalse(resultLabel, resultLocal, node.left);
}
else {
emitBreakWhenTrue(resultLabel, resultLocal, node.left);
}
emitAssignment(resultLocal, ts.visitNode(node.right, visitor, ts.isExpression), node.right);
markLabel(resultLabel);
return resultLocal;
}
function visitCommaExpression(node) {
var pendingExpressions = [];
visit(node.left);
visit(node.right);
return ts.inlineExpressions(pendingExpressions);
function visit(node) {
if (ts.isBinaryExpression(node) && node.operatorToken.kind === 26) {
visit(node.left);
visit(node.right);
}
else {
if (containsYield(node) && pendingExpressions.length > 0) {
emitWorker(1, [ts.createStatement(ts.inlineExpressions(pendingExpressions))]);
pendingExpressions = [];
}
pendingExpressions.push(ts.visitNode(node, visitor, ts.isExpression));
}
}
}
function visitConditionalExpression(node) {
if (containsYield(node.whenTrue) || containsYield(node.whenFalse)) {
var whenFalseLabel = defineLabel();
var resultLabel = defineLabel();
var resultLocal = declareLocal();
emitBreakWhenFalse(whenFalseLabel, ts.visitNode(node.condition, visitor, ts.isExpression), node.condition);
emitAssignment(resultLocal, ts.visitNode(node.whenTrue, visitor, ts.isExpression), node.whenTrue);
emitBreak(resultLabel);
markLabel(whenFalseLabel);
emitAssignment(resultLocal, ts.visitNode(node.whenFalse, visitor, ts.isExpression), node.whenFalse);
markLabel(resultLabel);
return resultLocal;
}
return ts.visitEachChild(node, visitor, context);
}
function visitYieldExpression(node) {
var resumeLabel = defineLabel();
var expression = ts.visitNode(node.expression, visitor, ts.isExpression);
if (node.asteriskToken) {
var iterator = (ts.getEmitFlags(node.expression) & 8388608) === 0
? ts.createValuesHelper(context, expression, node)
: expression;
emitYieldStar(iterator, node);
}
else {
emitYield(expression, node);
}
markLabel(resumeLabel);
return createGeneratorResume(node);
}
function visitArrayLiteralExpression(node) {
return visitElements(node.elements, undefined, undefined, node.multiLine);
}
function visitElements(elements, leadingElement, location, multiLine) {
var numInitialElements = countInitialNodesWithoutYield(elements);
var temp;
if (numInitialElements > 0) {
temp = declareLocal();
var initialElements = ts.visitNodes(elements, visitor, ts.isExpression, 0, numInitialElements);
emitAssignment(temp, ts.createArrayLiteral(leadingElement
? [leadingElement].concat(initialElements) : initialElements));
leadingElement = undefined;
}
var expressions = ts.reduceLeft(elements, reduceElement, [], numInitialElements);
return temp
? ts.createArrayConcat(temp, [ts.createArrayLiteral(expressions, multiLine)])
: ts.setTextRange(ts.createArrayLiteral(leadingElement ? [leadingElement].concat(expressions) : expressions, multiLine), location);
function reduceElement(expressions, element) {
if (containsYield(element) && expressions.length > 0) {
var hasAssignedTemp = temp !== undefined;
if (!temp) {
temp = declareLocal();
}
emitAssignment(temp, hasAssignedTemp
? ts.createArrayConcat(temp, [ts.createArrayLiteral(expressions, multiLine)])
: ts.createArrayLiteral(leadingElement ? [leadingElement].concat(expressions) : expressions, multiLine));
leadingElement = undefined;
expressions = [];
}
expressions.push(ts.visitNode(element, visitor, ts.isExpression));
return expressions;
}
}
function visitObjectLiteralExpression(node) {
var properties = node.properties;
var multiLine = node.multiLine;
var numInitialProperties = countInitialNodesWithoutYield(properties);
var temp = declareLocal();
emitAssignment(temp, ts.createObjectLiteral(ts.visitNodes(properties, visitor, ts.isObjectLiteralElementLike, 0, numInitialProperties), multiLine));
var expressions = ts.reduceLeft(properties, reduceProperty, [], numInitialProperties);
expressions.push(multiLine ? ts.startOnNewLine(ts.getMutableClone(temp)) : temp);
return ts.inlineExpressions(expressions);
function reduceProperty(expressions, property) {
if (containsYield(property) && expressions.length > 0) {
emitStatement(ts.createStatement(ts.inlineExpressions(expressions)));
expressions = [];
}
var expression = ts.createExpressionForObjectLiteralElementLike(node, property, temp);
var visited = ts.visitNode(expression, visitor, ts.isExpression);
if (visited) {
if (multiLine) {
visited.startsOnNewLine = true;
}
expressions.push(visited);
}
return expressions;
}
}
function visitElementAccessExpression(node) {
if (containsYield(node.argumentExpression)) {
var clone_5 = ts.getMutableClone(node);
clone_5.expression = cacheExpression(ts.visitNode(node.expression, visitor, ts.isLeftHandSideExpression));
clone_5.argumentExpression = ts.visitNode(node.argumentExpression, visitor, ts.isExpression);
return clone_5;
}
return ts.visitEachChild(node, visitor, context);
}
function visitCallExpression(node) {
if (!ts.isImportCall(node) && ts.forEach(node.arguments, containsYield)) {
var _a = ts.createCallBinding(node.expression, hoistVariableDeclaration, languageVersion, true), target = _a.target, thisArg = _a.thisArg;
return ts.setOriginalNode(ts.createFunctionApply(cacheExpression(ts.visitNode(target, visitor, ts.isLeftHandSideExpression)), thisArg, visitElements(node.arguments), node), node);
}
return ts.visitEachChild(node, visitor, context);
}
function visitNewExpression(node) {
if (ts.forEach(node.arguments, containsYield)) {
var _a = ts.createCallBinding(ts.createPropertyAccess(node.expression, "bind"), hoistVariableDeclaration), target = _a.target, thisArg = _a.thisArg;
return ts.setOriginalNode(ts.setTextRange(ts.createNew(ts.createFunctionApply(cacheExpression(ts.visitNode(target, visitor, ts.isExpression)), thisArg, visitElements(node.arguments, ts.createVoidZero())), undefined, []), node), node);
}
return ts.visitEachChild(node, visitor, context);
}
function transformAndEmitStatements(statements, start) {
if (start === void 0) { start = 0; }
var numStatements = statements.length;
for (var i = start; i < numStatements; i++) {
transformAndEmitStatement(statements[i]);
}
}
function transformAndEmitEmbeddedStatement(node) {
if (ts.isBlock(node)) {
transformAndEmitStatements(node.statements);
}
else {
transformAndEmitStatement(node);
}
}
function transformAndEmitStatement(node) {
var savedInStatementContainingYield = inStatementContainingYield;
if (!inStatementContainingYield) {
inStatementContainingYield = containsYield(node);
}
transformAndEmitStatementWorker(node);
inStatementContainingYield = savedInStatementContainingYield;
}
function transformAndEmitStatementWorker(node) {
switch (node.kind) {
case 207:
return transformAndEmitBlock(node);
case 210:
return transformAndEmitExpressionStatement(node);
case 211:
return transformAndEmitIfStatement(node);
case 212:
return transformAndEmitDoStatement(node);
case 213:
return transformAndEmitWhileStatement(node);
case 214:
return transformAndEmitForStatement(node);
case 215:
return transformAndEmitForInStatement(node);
case 217:
return transformAndEmitContinueStatement(node);
case 218:
return transformAndEmitBreakStatement(node);
case 219:
return transformAndEmitReturnStatement(node);
case 220:
return transformAndEmitWithStatement(node);
case 221:
return transformAndEmitSwitchStatement(node);
case 222:
return transformAndEmitLabeledStatement(node);
case 223:
return transformAndEmitThrowStatement(node);
case 224:
return transformAndEmitTryStatement(node);
default:
return emitStatement(ts.visitNode(node, visitor, ts.isStatement));
}
}
function transformAndEmitBlock(node) {
if (containsYield(node)) {
transformAndEmitStatements(node.statements);
}
else {
emitStatement(ts.visitNode(node, visitor, ts.isStatement));
}
}
function transformAndEmitExpressionStatement(node) {
emitStatement(ts.visitNode(node, visitor, ts.isStatement));
}
function transformAndEmitVariableDeclarationList(node) {
for (var _i = 0, _a = node.declarations; _i < _a.length; _i++) {
var variable = _a[_i];
var name = ts.getSynthesizedClone(variable.name);
ts.setCommentRange(name, variable.name);
hoistVariableDeclaration(name);
}
var variables = ts.getInitializedVariables(node);
var numVariables = variables.length;
var variablesWritten = 0;
var pendingExpressions = [];
while (variablesWritten < numVariables) {
for (var i = variablesWritten; i < numVariables; i++) {
var variable = variables[i];
if (containsYield(variable.initializer) && pendingExpressions.length > 0) {
break;
}
pendingExpressions.push(transformInitializedVariable(variable));
}
if (pendingExpressions.length) {
emitStatement(ts.createStatement(ts.inlineExpressions(pendingExpressions)));
variablesWritten += pendingExpressions.length;
pendingExpressions = [];
}
}
return undefined;
}
function transformInitializedVariable(node) {
return ts.setSourceMapRange(ts.createAssignment(ts.setSourceMapRange(ts.getSynthesizedClone(node.name), node.name), ts.visitNode(node.initializer, visitor, ts.isExpression)), node);
}
function transformAndEmitIfStatement(node) {
if (containsYield(node)) {
if (containsYield(node.thenStatement) || containsYield(node.elseStatement)) {
var endLabel = defineLabel();
var elseLabel = node.elseStatement ? defineLabel() : undefined;
emitBreakWhenFalse(node.elseStatement ? elseLabel : endLabel, ts.visitNode(node.expression, visitor, ts.isExpression), node.expression);
transformAndEmitEmbeddedStatement(node.thenStatement);
if (node.elseStatement) {
emitBreak(endLabel);
markLabel(elseLabel);
transformAndEmitEmbeddedStatement(node.elseStatement);
}
markLabel(endLabel);
}
else {
emitStatement(ts.visitNode(node, visitor, ts.isStatement));
}
}
else {
emitStatement(ts.visitNode(node, visitor, ts.isStatement));
}
}
function transformAndEmitDoStatement(node) {
if (containsYield(node)) {
var conditionLabel = defineLabel();
var loopLabel = defineLabel();
beginLoopBlock(conditionLabel);
markLabel(loopLabel);
transformAndEmitEmbeddedStatement(node.statement);
markLabel(conditionLabel);
emitBreakWhenTrue(loopLabel, ts.visitNode(node.expression, visitor, ts.isExpression));
endLoopBlock();
}
else {
emitStatement(ts.visitNode(node, visitor, ts.isStatement));
}
}
function visitDoStatement(node) {
if (inStatementContainingYield) {
beginScriptLoopBlock();
node = ts.visitEachChild(node, visitor, context);
endLoopBlock();
return node;
}
else {
return ts.visitEachChild(node, visitor, context);
}
}
function transformAndEmitWhileStatement(node) {
if (containsYield(node)) {
var loopLabel = defineLabel();
var endLabel = beginLoopBlock(loopLabel);
markLabel(loopLabel);
emitBreakWhenFalse(endLabel, ts.visitNode(node.expression, visitor, ts.isExpression));
transformAndEmitEmbeddedStatement(node.statement);
emitBreak(loopLabel);
endLoopBlock();
}
else {
emitStatement(ts.visitNode(node, visitor, ts.isStatement));
}
}
function visitWhileStatement(node) {
if (inStatementContainingYield) {
beginScriptLoopBlock();
node = ts.visitEachChild(node, visitor, context);
endLoopBlock();
return node;
}
else {
return ts.visitEachChild(node, visitor, context);
}
}
function transformAndEmitForStatement(node) {
if (containsYield(node)) {
var conditionLabel = defineLabel();
var incrementLabel = defineLabel();
var endLabel = beginLoopBlock(incrementLabel);
if (node.initializer) {
var initializer = node.initializer;
if (ts.isVariableDeclarationList(initializer)) {
transformAndEmitVariableDeclarationList(initializer);
}
else {
emitStatement(ts.setTextRange(ts.createStatement(ts.visitNode(initializer, visitor, ts.isExpression)), initializer));
}
}
markLabel(conditionLabel);
if (node.condition) {
emitBreakWhenFalse(endLabel, ts.visitNode(node.condition, visitor, ts.isExpression));
}
transformAndEmitEmbeddedStatement(node.statement);
markLabel(incrementLabel);
if (node.incrementor) {
emitStatement(ts.setTextRange(ts.createStatement(ts.visitNode(node.incrementor, visitor, ts.isExpression)), node.incrementor));
}
emitBreak(conditionLabel);
endLoopBlock();
}
else {
emitStatement(ts.visitNode(node, visitor, ts.isStatement));
}
}
function visitForStatement(node) {
if (inStatementContainingYield) {
beginScriptLoopBlock();
}
var initializer = node.initializer;
if (initializer && ts.isVariableDeclarationList(initializer)) {
for (var _i = 0, _a = initializer.declarations; _i < _a.length; _i++) {
var variable = _a[_i];
hoistVariableDeclaration(variable.name);
}
var variables = ts.getInitializedVariables(initializer);
node = ts.updateFor(node, variables.length > 0
? ts.inlineExpressions(ts.map(variables, transformInitializedVariable))
: undefined, ts.visitNode(node.condition, visitor, ts.isExpression), ts.visitNode(node.incrementor, visitor, ts.isExpression), ts.visitNode(node.statement, visitor, ts.isStatement, ts.liftToBlock));
}
else {
node = ts.visitEachChild(node, visitor, context);
}
if (inStatementContainingYield) {
endLoopBlock();
}
return node;
}
function transformAndEmitForInStatement(node) {
if (containsYield(node)) {
var keysArray = declareLocal();
var key = declareLocal();
var keysIndex = ts.createLoopVariable();
var initializer = node.initializer;
hoistVariableDeclaration(keysIndex);
emitAssignment(keysArray, ts.createArrayLiteral());
emitStatement(ts.createForIn(key, ts.visitNode(node.expression, visitor, ts.isExpression), ts.createStatement(ts.createCall(ts.createPropertyAccess(keysArray, "push"), undefined, [key]))));
emitAssignment(keysIndex, ts.createLiteral(0));
var conditionLabel = defineLabel();
var incrementLabel = defineLabel();
var endLabel = beginLoopBlock(incrementLabel);
markLabel(conditionLabel);
emitBreakWhenFalse(endLabel, ts.createLessThan(keysIndex, ts.createPropertyAccess(keysArray, "length")));
var variable = void 0;
if (ts.isVariableDeclarationList(initializer)) {
for (var _i = 0, _a = initializer.declarations; _i < _a.length; _i++) {
var variable_1 = _a[_i];
hoistVariableDeclaration(variable_1.name);
}
variable = ts.getSynthesizedClone(initializer.declarations[0].name);
}
else {
variable = ts.visitNode(initializer, visitor, ts.isExpression);
ts.Debug.assert(ts.isLeftHandSideExpression(variable));
}
emitAssignment(variable, ts.createElementAccess(keysArray, keysIndex));
transformAndEmitEmbeddedStatement(node.statement);
markLabel(incrementLabel);
emitStatement(ts.createStatement(ts.createPostfixIncrement(keysIndex)));
emitBreak(conditionLabel);
endLoopBlock();
}
else {
emitStatement(ts.visitNode(node, visitor, ts.isStatement));
}
}
function visitForInStatement(node) {
if (inStatementContainingYield) {
beginScriptLoopBlock();
}
var initializer = node.initializer;
if (ts.isVariableDeclarationList(initializer)) {
for (var _i = 0, _a = initializer.declarations; _i < _a.length; _i++) {
var variable = _a[_i];
hoistVariableDeclaration(variable.name);
}
node = ts.updateForIn(node, initializer.declarations[0].name, ts.visitNode(node.expression, visitor, ts.isExpression), ts.visitNode(node.statement, visitor, ts.isStatement, ts.liftToBlock));
}
else {
node = ts.visitEachChild(node, visitor, context);
}
if (inStatementContainingYield) {
endLoopBlock();
}
return node;
}
function transformAndEmitContinueStatement(node) {
var label = findContinueTarget(node.label ? ts.idText(node.label) : undefined);
if (label > 0) {
emitBreak(label, node);
}
else {
emitStatement(node);
}
}
function visitContinueStatement(node) {
if (inStatementContainingYield) {
var label = findContinueTarget(node.label && ts.idText(node.label));
if (label > 0) {
return createInlineBreak(label, node);
}
}
return ts.visitEachChild(node, visitor, context);
}
function transformAndEmitBreakStatement(node) {
var label = findBreakTarget(node.label ? ts.idText(node.label) : undefined);
if (label > 0) {
emitBreak(label, node);
}
else {
emitStatement(node);
}
}
function visitBreakStatement(node) {
if (inStatementContainingYield) {
var label = findBreakTarget(node.label && ts.idText(node.label));
if (label > 0) {
return createInlineBreak(label, node);
}
}
return ts.visitEachChild(node, visitor, context);
}
function transformAndEmitReturnStatement(node) {
emitReturn(ts.visitNode(node.expression, visitor, ts.isExpression), node);
}
function visitReturnStatement(node) {
return createInlineReturn(ts.visitNode(node.expression, visitor, ts.isExpression), node);
}
function transformAndEmitWithStatement(node) {
if (containsYield(node)) {
beginWithBlock(cacheExpression(ts.visitNode(node.expression, visitor, ts.isExpression)));
transformAndEmitEmbeddedStatement(node.statement);
endWithBlock();
}
else {
emitStatement(ts.visitNode(node, visitor, ts.isStatement));
}
}
function transformAndEmitSwitchStatement(node) {
if (containsYield(node.caseBlock)) {
var caseBlock = node.caseBlock;
var numClauses = caseBlock.clauses.length;
var endLabel = beginSwitchBlock();
var expression = cacheExpression(ts.visitNode(node.expression, visitor, ts.isExpression));
var clauseLabels = [];
var defaultClauseIndex = -1;
for (var i = 0; i < numClauses; i++) {
var clause = caseBlock.clauses[i];
clauseLabels.push(defineLabel());
if (clause.kind === 258 && defaultClauseIndex === -1) {
defaultClauseIndex = i;
}
}
var clausesWritten = 0;
var pendingClauses = [];
while (clausesWritten < numClauses) {
var defaultClausesSkipped = 0;
for (var i = clausesWritten; i < numClauses; i++) {
var clause = caseBlock.clauses[i];
if (clause.kind === 257) {
var caseClause = clause;
if (containsYield(caseClause.expression) && pendingClauses.length > 0) {
break;
}
pendingClauses.push(ts.createCaseClause(ts.visitNode(caseClause.expression, visitor, ts.isExpression), [
createInlineBreak(clauseLabels[i], caseClause.expression)
]));
}
else {
defaultClausesSkipped++;
}
}
if (pendingClauses.length) {
emitStatement(ts.createSwitch(expression, ts.createCaseBlock(pendingClauses)));
clausesWritten += pendingClauses.length;
pendingClauses = [];
}
if (defaultClausesSkipped > 0) {
clausesWritten += defaultClausesSkipped;
defaultClausesSkipped = 0;
}
}
if (defaultClauseIndex >= 0) {
emitBreak(clauseLabels[defaultClauseIndex]);
}
else {
emitBreak(endLabel);
}
for (var i = 0; i < numClauses; i++) {
markLabel(clauseLabels[i]);
transformAndEmitStatements(caseBlock.clauses[i].statements);
}
endSwitchBlock();
}
else {
emitStatement(ts.visitNode(node, visitor, ts.isStatement));
}
}
function visitSwitchStatement(node) {
if (inStatementContainingYield) {
beginScriptSwitchBlock();
}
node = ts.visitEachChild(node, visitor, context);
if (inStatementContainingYield) {
endSwitchBlock();
}
return node;
}
function transformAndEmitLabeledStatement(node) {
if (containsYield(node)) {
beginLabeledBlock(ts.idText(node.label));
transformAndEmitEmbeddedStatement(node.statement);
endLabeledBlock();
}
else {
emitStatement(ts.visitNode(node, visitor, ts.isStatement));
}
}
function visitLabeledStatement(node) {
if (inStatementContainingYield) {
beginScriptLabeledBlock(ts.idText(node.label));
}
node = ts.visitEachChild(node, visitor, context);
if (inStatementContainingYield) {
endLabeledBlock();
}
return node;
}
function transformAndEmitThrowStatement(node) {
emitThrow(ts.visitNode(node.expression, visitor, ts.isExpression), node);
}
function transformAndEmitTryStatement(node) {
if (containsYield(node)) {
beginExceptionBlock();
transformAndEmitEmbeddedStatement(node.tryBlock);
if (node.catchClause) {
beginCatchBlock(node.catchClause.variableDeclaration);
transformAndEmitEmbeddedStatement(node.catchClause.block);
}
if (node.finallyBlock) {
beginFinallyBlock();
transformAndEmitEmbeddedStatement(node.finallyBlock);
}
endExceptionBlock();
}
else {
emitStatement(ts.visitEachChild(node, visitor, context));
}
}
function containsYield(node) {
return node && (node.transformFlags & 16777216) !== 0;
}
function countInitialNodesWithoutYield(nodes) {
var numNodes = nodes.length;
for (var i = 0; i < numNodes; i++) {
if (containsYield(nodes[i])) {
return i;
}
}
return -1;
}
function onSubstituteNode(hint, node) {
node = previousOnSubstituteNode(hint, node);
if (hint === 1) {
return substituteExpression(node);
}
return node;
}
function substituteExpression(node) {
if (ts.isIdentifier(node)) {
return substituteExpressionIdentifier(node);
}
return node;
}
function substituteExpressionIdentifier(node) {
if (!ts.isGeneratedIdentifier(node) && renamedCatchVariables && renamedCatchVariables.has(ts.idText(node))) {
var original = ts.getOriginalNode(node);
if (ts.isIdentifier(original) && original.parent) {
var declaration = resolver.getReferencedValueDeclaration(original);
if (declaration) {
var name = renamedCatchVariableDeclarations[ts.getOriginalNodeId(declaration)];
if (name) {
var clone_6 = ts.getMutableClone(name);
ts.setSourceMapRange(clone_6, node);
ts.setCommentRange(clone_6, node);
return clone_6;
}
}
}
}
return node;
}
function cacheExpression(node) {
var temp;
if (ts.isGeneratedIdentifier(node) || ts.getEmitFlags(node) & 4096) {
return node;
}
temp = ts.createTempVariable(hoistVariableDeclaration);
emitAssignment(temp, node, node);
return temp;
}
function declareLocal(name) {
var temp = name
? ts.createUniqueName(name)
: ts.createTempVariable(undefined);
hoistVariableDeclaration(temp);
return temp;
}
function defineLabel() {
if (!labelOffsets) {
labelOffsets = [];
}
var label = nextLabelId;
nextLabelId++;
labelOffsets[label] = -1;
return label;
}
function markLabel(label) {
ts.Debug.assert(labelOffsets !== undefined, "No labels were defined.");
labelOffsets[label] = operations ? operations.length : 0;
}
function beginBlock(block) {
if (!blocks) {
blocks = [];
blockActions = [];
blockOffsets = [];
blockStack = [];
}
var index = blockActions.length;
blockActions[index] = 0;
blockOffsets[index] = operations ? operations.length : 0;
blocks[index] = block;
blockStack.push(block);
return index;
}
function endBlock() {
var block = peekBlock();
ts.Debug.assert(block !== undefined, "beginBlock was never called.");
var index = blockActions.length;
blockActions[index] = 1;
blockOffsets[index] = operations ? operations.length : 0;
blocks[index] = block;
blockStack.pop();
return block;
}
function peekBlock() {
return ts.lastOrUndefined(blockStack);
}
function peekBlockKind() {
var block = peekBlock();
return block && block.kind;
}
function beginWithBlock(expression) {
var startLabel = defineLabel();
var endLabel = defineLabel();
markLabel(startLabel);
beginBlock({
kind: 1,
expression: expression,
startLabel: startLabel,
endLabel: endLabel
});
}
function endWithBlock() {
ts.Debug.assert(peekBlockKind() === 1);
var block = endBlock();
markLabel(block.endLabel);
}
function beginExceptionBlock() {
var startLabel = defineLabel();
var endLabel = defineLabel();
markLabel(startLabel);
beginBlock({
kind: 0,
state: 0,
startLabel: startLabel,
endLabel: endLabel
});
emitNop();
return endLabel;
}
function beginCatchBlock(variable) {
ts.Debug.assert(peekBlockKind() === 0);
var name;
if (ts.isGeneratedIdentifier(variable.name)) {
name = variable.name;
hoistVariableDeclaration(variable.name);
}
else {
var text = ts.idText(variable.name);
name = declareLocal(text);
if (!renamedCatchVariables) {
renamedCatchVariables = ts.createMap();
renamedCatchVariableDeclarations = [];
context.enableSubstitution(71);
}
renamedCatchVariables.set(text, true);
renamedCatchVariableDeclarations[ts.getOriginalNodeId(variable)] = name;
}
var exception = peekBlock();
ts.Debug.assert(exception.state < 1);
var endLabel = exception.endLabel;
emitBreak(endLabel);
var catchLabel = defineLabel();
markLabel(catchLabel);
exception.state = 1;
exception.catchVariable = name;
exception.catchLabel = catchLabel;
emitAssignment(name, ts.createCall(ts.createPropertyAccess(state, "sent"), undefined, []));
emitNop();
}
function beginFinallyBlock() {
ts.Debug.assert(peekBlockKind() === 0);
var exception = peekBlock();
ts.Debug.assert(exception.state < 2);
var endLabel = exception.endLabel;
emitBreak(endLabel);
var finallyLabel = defineLabel();
markLabel(finallyLabel);
exception.state = 2;
exception.finallyLabel = finallyLabel;
}
function endExceptionBlock() {
ts.Debug.assert(peekBlockKind() === 0);
var exception = endBlock();
var state = exception.state;
if (state < 2) {
emitBreak(exception.endLabel);
}
else {
emitEndfinally();
}
markLabel(exception.endLabel);
emitNop();
exception.state = 3;
}
function beginScriptLoopBlock() {
beginBlock({
kind: 3,
isScript: true,
breakLabel: -1,
continueLabel: -1
});
}
function beginLoopBlock(continueLabel) {
var breakLabel = defineLabel();
beginBlock({
kind: 3,
isScript: false,
breakLabel: breakLabel,
continueLabel: continueLabel,
});
return breakLabel;
}
function endLoopBlock() {
ts.Debug.assert(peekBlockKind() === 3);
var block = endBlock();
var breakLabel = block.breakLabel;
if (!block.isScript) {
markLabel(breakLabel);
}
}
function beginScriptSwitchBlock() {
beginBlock({
kind: 2,
isScript: true,
breakLabel: -1
});
}
function beginSwitchBlock() {
var breakLabel = defineLabel();
beginBlock({
kind: 2,
isScript: false,
breakLabel: breakLabel,
});
return breakLabel;
}
function endSwitchBlock() {
ts.Debug.assert(peekBlockKind() === 2);
var block = endBlock();
var breakLabel = block.breakLabel;
if (!block.isScript) {
markLabel(breakLabel);
}
}
function beginScriptLabeledBlock(labelText) {
beginBlock({
kind: 4,
isScript: true,
labelText: labelText,
breakLabel: -1
});
}
function beginLabeledBlock(labelText) {
var breakLabel = defineLabel();
beginBlock({
kind: 4,
isScript: false,
labelText: labelText,
breakLabel: breakLabel
});
}
function endLabeledBlock() {
ts.Debug.assert(peekBlockKind() === 4);
var block = endBlock();
if (!block.isScript) {
markLabel(block.breakLabel);
}
}
function supportsUnlabeledBreak(block) {
return block.kind === 2
|| block.kind === 3;
}
function supportsLabeledBreakOrContinue(block) {
return block.kind === 4;
}
function supportsUnlabeledContinue(block) {
return block.kind === 3;
}
function hasImmediateContainingLabeledBlock(labelText, start) {
for (var j = start; j >= 0; j--) {
var containingBlock = blockStack[j];
if (supportsLabeledBreakOrContinue(containingBlock)) {
if (containingBlock.labelText === labelText) {
return true;
}
}
else {
break;
}
}
return false;
}
function findBreakTarget(labelText) {
if (blockStack) {
if (labelText) {
for (var i = blockStack.length - 1; i >= 0; i--) {
var block = blockStack[i];
if (supportsLabeledBreakOrContinue(block) && block.labelText === labelText) {
return block.breakLabel;
}
else if (supportsUnlabeledBreak(block) && hasImmediateContainingLabeledBlock(labelText, i - 1)) {
return block.breakLabel;
}
}
}
else {
for (var i = blockStack.length - 1; i >= 0; i--) {
var block = blockStack[i];
if (supportsUnlabeledBreak(block)) {
return block.breakLabel;
}
}
}
}
return 0;
}
function findContinueTarget(labelText) {
if (blockStack) {
if (labelText) {
for (var i = blockStack.length - 1; i >= 0; i--) {
var block = blockStack[i];
if (supportsUnlabeledContinue(block) && hasImmediateContainingLabeledBlock(labelText, i - 1)) {
return block.continueLabel;
}
}
}
else {
for (var i = blockStack.length - 1; i >= 0; i--) {
var block = blockStack[i];
if (supportsUnlabeledContinue(block)) {
return block.continueLabel;
}
}
}
}
return 0;
}
function createLabel(label) {
if (label > 0) {
if (labelExpressions === undefined) {
labelExpressions = [];
}
var expression = ts.createLiteral(-1);
if (labelExpressions[label] === undefined) {
labelExpressions[label] = [expression];
}
else {
labelExpressions[label].push(expression);
}
return expression;
}
return ts.createOmittedExpression();
}
function createInstruction(instruction) {
var literal = ts.createLiteral(instruction);
ts.addSyntheticTrailingComment(literal, 3, getInstructionName(instruction));
return literal;
}
function createInlineBreak(label, location) {
ts.Debug.assertLessThan(0, label, "Invalid label");
return ts.setTextRange(ts.createReturn(ts.createArrayLiteral([
createInstruction(3),
createLabel(label)
])), location);
}
function createInlineReturn(expression, location) {
return ts.setTextRange(ts.createReturn(ts.createArrayLiteral(expression
? [createInstruction(2), expression]
: [createInstruction(2)])), location);
}
function createGeneratorResume(location) {
return ts.setTextRange(ts.createCall(ts.createPropertyAccess(state, "sent"), undefined, []), location);
}
function emitNop() {
emitWorker(0);
}
function emitStatement(node) {
if (node) {
emitWorker(1, [node]);
}
else {
emitNop();
}
}
function emitAssignment(left, right, location) {
emitWorker(2, [left, right], location);
}
function emitBreak(label, location) {
emitWorker(3, [label], location);
}
function emitBreakWhenTrue(label, condition, location) {
emitWorker(4, [label, condition], location);
}
function emitBreakWhenFalse(label, condition, location) {
emitWorker(5, [label, condition], location);
}
function emitYieldStar(expression, location) {
emitWorker(7, [expression], location);
}
function emitYield(expression, location) {
emitWorker(6, [expression], location);
}
function emitReturn(expression, location) {
emitWorker(8, [expression], location);
}
function emitThrow(expression, location) {
emitWorker(9, [expression], location);
}
function emitEndfinally() {
emitWorker(10);
}
function emitWorker(code, args, location) {
if (operations === undefined) {
operations = [];
operationArguments = [];
operationLocations = [];
}
if (labelOffsets === undefined) {
markLabel(defineLabel());
}
var operationIndex = operations.length;
operations[operationIndex] = code;
operationArguments[operationIndex] = args;
operationLocations[operationIndex] = location;
}
function build() {
blockIndex = 0;
labelNumber = 0;
labelNumbers = undefined;
lastOperationWasAbrupt = false;
lastOperationWasCompletion = false;
clauses = undefined;
statements = undefined;
exceptionBlockStack = undefined;
currentExceptionBlock = undefined;
withBlockStack = undefined;
var buildResult = buildStatements();
return createGeneratorHelper(context, ts.setEmitFlags(ts.createFunctionExpression(undefined, undefined, undefined, undefined, [ts.createParameter(undefined, undefined, undefined, state)], undefined, ts.createBlock(buildResult, buildResult.length > 0)), 524288));
}
function buildStatements() {
if (operations) {
for (var operationIndex = 0; operationIndex < operations.length; operationIndex++) {
writeOperation(operationIndex);
}
flushFinalLabel(operations.length);
}
else {
flushFinalLabel(0);
}
if (clauses) {
var labelExpression = ts.createPropertyAccess(state, "label");
var switchStatement = ts.createSwitch(labelExpression, ts.createCaseBlock(clauses));
switchStatement.startsOnNewLine = true;
return [switchStatement];
}
if (statements) {
return statements;
}
return [];
}
function flushLabel() {
if (!statements) {
return;
}
appendLabel(!lastOperationWasAbrupt);
lastOperationWasAbrupt = false;
lastOperationWasCompletion = false;
labelNumber++;
}
function flushFinalLabel(operationIndex) {
if (isFinalLabelReachable(operationIndex)) {
tryEnterLabel(operationIndex);
withBlockStack = undefined;
writeReturn(undefined, undefined);
}
if (statements && clauses) {
appendLabel(false);
}
updateLabelExpressions();
}
function isFinalLabelReachable(operationIndex) {
if (!lastOperationWasCompletion) {
return true;
}
if (!labelOffsets || !labelExpressions) {
return false;
}
for (var label = 0; label < labelOffsets.length; label++) {
if (labelOffsets[label] === operationIndex && labelExpressions[label]) {
return true;
}
}
return false;
}
function appendLabel(markLabelEnd) {
if (!clauses) {
clauses = [];
}
if (statements) {
if (withBlockStack) {
for (var i = withBlockStack.length - 1; i >= 0; i--) {
var withBlock = withBlockStack[i];
statements = [ts.createWith(withBlock.expression, ts.createBlock(statements))];
}
}
if (currentExceptionBlock) {
var startLabel = currentExceptionBlock.startLabel, catchLabel = currentExceptionBlock.catchLabel, finallyLabel = currentExceptionBlock.finallyLabel, endLabel = currentExceptionBlock.endLabel;
statements.unshift(ts.createStatement(ts.createCall(ts.createPropertyAccess(ts.createPropertyAccess(state, "trys"), "push"), undefined, [
ts.createArrayLiteral([
createLabel(startLabel),
createLabel(catchLabel),
createLabel(finallyLabel),
createLabel(endLabel)
])
])));
currentExceptionBlock = undefined;
}
if (markLabelEnd) {
statements.push(ts.createStatement(ts.createAssignment(ts.createPropertyAccess(state, "label"), ts.createLiteral(labelNumber + 1))));
}
}
clauses.push(ts.createCaseClause(ts.createLiteral(labelNumber), statements || []));
statements = undefined;
}
function tryEnterLabel(operationIndex) {
if (!labelOffsets) {
return;
}
for (var label = 0; label < labelOffsets.length; label++) {
if (labelOffsets[label] === operationIndex) {
flushLabel();
if (labelNumbers === undefined) {
labelNumbers = [];
}
if (labelNumbers[labelNumber] === undefined) {
labelNumbers[labelNumber] = [label];
}
else {
labelNumbers[labelNumber].push(label);
}
}
}
}
function updateLabelExpressions() {
if (labelExpressions !== undefined && labelNumbers !== undefined) {
for (var labelNumber_1 = 0; labelNumber_1 < labelNumbers.length; labelNumber_1++) {
var labels = labelNumbers[labelNumber_1];
if (labels !== undefined) {
for (var _i = 0, labels_1 = labels; _i < labels_1.length; _i++) {
var label = labels_1[_i];
var expressions = labelExpressions[label];
if (expressions !== undefined) {
for (var _a = 0, expressions_1 = expressions; _a < expressions_1.length; _a++) {
var expression = expressions_1[_a];
expression.text = String(labelNumber_1);
}
}
}
}
}
}
}
function tryEnterOrLeaveBlock(operationIndex) {
if (blocks) {
for (; blockIndex < blockActions.length && blockOffsets[blockIndex] <= operationIndex; blockIndex++) {
var block = blocks[blockIndex];
var blockAction = blockActions[blockIndex];
switch (block.kind) {
case 0:
if (blockAction === 0) {
if (!exceptionBlockStack) {
exceptionBlockStack = [];
}
if (!statements) {
statements = [];
}
exceptionBlockStack.push(currentExceptionBlock);
currentExceptionBlock = block;
}
else if (blockAction === 1) {
currentExceptionBlock = exceptionBlockStack.pop();
}
break;
case 1:
if (blockAction === 0) {
if (!withBlockStack) {
withBlockStack = [];
}
withBlockStack.push(block);
}
else if (blockAction === 1) {
withBlockStack.pop();
}
break;
}
}
}
}
function writeOperation(operationIndex) {
tryEnterLabel(operationIndex);
tryEnterOrLeaveBlock(operationIndex);
if (lastOperationWasAbrupt) {
return;
}
lastOperationWasAbrupt = false;
lastOperationWasCompletion = false;
var opcode = operations[operationIndex];
if (opcode === 0) {
return;
}
else if (opcode === 10) {
return writeEndfinally();
}
var args = operationArguments[operationIndex];
if (opcode === 1) {
return writeStatement(args[0]);
}
var location = operationLocations[operationIndex];
switch (opcode) {
case 2:
return writeAssign(args[0], args[1], location);
case 3:
return writeBreak(args[0], location);
case 4:
return writeBreakWhenTrue(args[0], args[1], location);
case 5:
return writeBreakWhenFalse(args[0], args[1], location);
case 6:
return writeYield(args[0], location);
case 7:
return writeYieldStar(args[0], location);
case 8:
return writeReturn(args[0], location);
case 9:
return writeThrow(args[0], location);
}
}
function writeStatement(statement) {
if (statement) {
if (!statements) {
statements = [statement];
}
else {
statements.push(statement);
}
}
}
function writeAssign(left, right, operationLocation) {
writeStatement(ts.setTextRange(ts.createStatement(ts.createAssignment(left, right)), operationLocation));
}
function writeThrow(expression, operationLocation) {
lastOperationWasAbrupt = true;
lastOperationWasCompletion = true;
writeStatement(ts.setTextRange(ts.createThrow(expression), operationLocation));
}
function writeReturn(expression, operationLocation) {
lastOperationWasAbrupt = true;
lastOperationWasCompletion = true;
writeStatement(ts.setEmitFlags(ts.setTextRange(ts.createReturn(ts.createArrayLiteral(expression
? [createInstruction(2), expression]
: [createInstruction(2)])), operationLocation), 384));
}
function writeBreak(label, operationLocation) {
lastOperationWasAbrupt = true;
writeStatement(ts.setEmitFlags(ts.setTextRange(ts.createReturn(ts.createArrayLiteral([
createInstruction(3),
createLabel(label)
])), operationLocation), 384));
}
function writeBreakWhenTrue(label, condition, operationLocation) {
writeStatement(ts.setEmitFlags(ts.createIf(condition, ts.setEmitFlags(ts.setTextRange(ts.createReturn(ts.createArrayLiteral([
createInstruction(3),
createLabel(label)
])), operationLocation), 384)), 1));
}
function writeBreakWhenFalse(label, condition, operationLocation) {
writeStatement(ts.setEmitFlags(ts.createIf(ts.createLogicalNot(condition), ts.setEmitFlags(ts.setTextRange(ts.createReturn(ts.createArrayLiteral([
createInstruction(3),
createLabel(label)
])), operationLocation), 384)), 1));
}
function writeYield(expression, operationLocation) {
lastOperationWasAbrupt = true;
writeStatement(ts.setEmitFlags(ts.setTextRange(ts.createReturn(ts.createArrayLiteral(expression
? [createInstruction(4), expression]
: [createInstruction(4)])), operationLocation), 384));
}
function writeYieldStar(expression, operationLocation) {
lastOperationWasAbrupt = true;
writeStatement(ts.setEmitFlags(ts.setTextRange(ts.createReturn(ts.createArrayLiteral([
createInstruction(5),
expression
])), operationLocation), 384));
}
function writeEndfinally() {
lastOperationWasAbrupt = true;
writeStatement(ts.createReturn(ts.createArrayLiteral([
createInstruction(7)
])));
}
}
ts.transformGenerators = transformGenerators;
function createGeneratorHelper(context, body) {
context.requestEmitHelper(generatorHelper);
return ts.createCall(ts.getHelperName("__generator"), undefined, [ts.createThis(), body]);
}
var generatorHelper = {
name: "typescript:generator",
scoped: false,
priority: 6,
text: "\n var __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = y[op[0] & 2 ? \"return\" : op[0] ? \"throw\" : \"next\"]) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [0, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n };"
};
})(ts || (ts = {}));
var ts;
(function (ts) {
function transformModule(context) {
function getTransformModuleDelegate(moduleKind) {
switch (moduleKind) {
case ts.ModuleKind.AMD: return transformAMDModule;
case ts.ModuleKind.UMD: return transformUMDModule;
default: return transformCommonJSModule;
}
}
var startLexicalEnvironment = context.startLexicalEnvironment, endLexicalEnvironment = context.endLexicalEnvironment, hoistVariableDeclaration = context.hoistVariableDeclaration;
var compilerOptions = context.getCompilerOptions();
var resolver = context.getEmitResolver();
var host = context.getEmitHost();
var languageVersion = ts.getEmitScriptTarget(compilerOptions);
var moduleKind = ts.getEmitModuleKind(compilerOptions);
var previousOnSubstituteNode = context.onSubstituteNode;
var previousOnEmitNode = context.onEmitNode;
context.onSubstituteNode = onSubstituteNode;
context.onEmitNode = onEmitNode;
context.enableSubstitution(71);
context.enableSubstitution(194);
context.enableSubstitution(192);
context.enableSubstitution(193);
context.enableSubstitution(262);
context.enableEmitNotification(265);
var moduleInfoMap = [];
var deferredExports = [];
var currentSourceFile;
var currentModuleInfo;
var noSubstitution;
var needUMDDynamicImportHelper;
return transformSourceFile;
function transformSourceFile(node) {
if (node.isDeclarationFile || !(ts.isExternalModule(node) || compilerOptions.isolatedModules || node.transformFlags & 67108864)) {
return node;
}
currentSourceFile = node;
currentModuleInfo = ts.collectExternalModuleInfo(node, resolver, compilerOptions);
moduleInfoMap[ts.getOriginalNodeId(node)] = currentModuleInfo;
var transformModule = getTransformModuleDelegate(moduleKind);
var updated = transformModule(node);
currentSourceFile = undefined;
currentModuleInfo = undefined;
needUMDDynamicImportHelper = false;
return ts.aggregateTransformFlags(updated);
}
function shouldEmitUnderscoreUnderscoreESModule() {
if (!currentModuleInfo.exportEquals && ts.isExternalModule(currentSourceFile)) {
return true;
}
return false;
}
function transformCommonJSModule(node) {
startLexicalEnvironment();
var statements = [];
var ensureUseStrict = compilerOptions.alwaysStrict || (!compilerOptions.noImplicitUseStrict && ts.isExternalModule(currentSourceFile));
var statementOffset = ts.addPrologue(statements, node.statements, ensureUseStrict, sourceElementVisitor);
if (shouldEmitUnderscoreUnderscoreESModule()) {
ts.append(statements, createUnderscoreUnderscoreESModule());
}
ts.append(statements, ts.visitNode(currentModuleInfo.externalHelpersImportDeclaration, sourceElementVisitor, ts.isStatement));
ts.addRange(statements, ts.visitNodes(node.statements, sourceElementVisitor, ts.isStatement, statementOffset));
addExportEqualsIfNeeded(statements, false);
ts.addRange(statements, endLexicalEnvironment());
var updated = ts.updateSourceFileNode(node, ts.setTextRange(ts.createNodeArray(statements), node.statements));
if (currentModuleInfo.hasExportStarsToExportValues && !compilerOptions.importHelpers) {
ts.addEmitHelper(updated, exportStarHelper);
}
ts.addEmitHelpers(updated, context.readEmitHelpers());
return updated;
}
function transformAMDModule(node) {
var define = ts.createIdentifier("define");
var moduleName = ts.tryGetModuleNameFromFile(node, host, compilerOptions);
var _a = collectAsynchronousDependencies(node, true), aliasedModuleNames = _a.aliasedModuleNames, unaliasedModuleNames = _a.unaliasedModuleNames, importAliasNames = _a.importAliasNames;
return ts.updateSourceFileNode(node, ts.setTextRange(ts.createNodeArray([
ts.createStatement(ts.createCall(define, undefined, (moduleName ? [moduleName] : []).concat([
ts.createArrayLiteral([
ts.createLiteral("require"),
ts.createLiteral("exports")
].concat(aliasedModuleNames, unaliasedModuleNames)),
ts.createFunctionExpression(undefined, undefined, undefined, undefined, [
ts.createParameter(undefined, undefined, undefined, "require"),
ts.createParameter(undefined, undefined, undefined, "exports")
].concat(importAliasNames), undefined, transformAsynchronousModuleBody(node))
])))
]), node.statements));
}
function transformUMDModule(node) {
var _a = collectAsynchronousDependencies(node, false), aliasedModuleNames = _a.aliasedModuleNames, unaliasedModuleNames = _a.unaliasedModuleNames, importAliasNames = _a.importAliasNames;
var moduleName = ts.tryGetModuleNameFromFile(node, host, compilerOptions);
var umdHeader = ts.createFunctionExpression(undefined, undefined, undefined, undefined, [ts.createParameter(undefined, undefined, undefined, "factory")], undefined, ts.setTextRange(ts.createBlock([
ts.createIf(ts.createLogicalAnd(ts.createTypeCheck(ts.createIdentifier("module"), "object"), ts.createTypeCheck(ts.createPropertyAccess(ts.createIdentifier("module"), "exports"), "object")), ts.createBlock([
ts.createVariableStatement(undefined, [
ts.createVariableDeclaration("v", undefined, ts.createCall(ts.createIdentifier("factory"), undefined, [
ts.createIdentifier("require"),
ts.createIdentifier("exports")
]))
]),
ts.setEmitFlags(ts.createIf(ts.createStrictInequality(ts.createIdentifier("v"), ts.createIdentifier("undefined")), ts.createStatement(ts.createAssignment(ts.createPropertyAccess(ts.createIdentifier("module"), "exports"), ts.createIdentifier("v")))), 1)
]), ts.createIf(ts.createLogicalAnd(ts.createTypeCheck(ts.createIdentifier("define"), "function"), ts.createPropertyAccess(ts.createIdentifier("define"), "amd")), ts.createBlock([
ts.createStatement(ts.createCall(ts.createIdentifier("define"), undefined, (moduleName ? [moduleName] : []).concat([
ts.createArrayLiteral([
ts.createLiteral("require"),
ts.createLiteral("exports")
].concat(aliasedModuleNames, unaliasedModuleNames)),
ts.createIdentifier("factory")
])))
])))
], true), undefined));
return ts.updateSourceFileNode(node, ts.setTextRange(ts.createNodeArray([
ts.createStatement(ts.createCall(umdHeader, undefined, [
ts.createFunctionExpression(undefined, undefined, undefined, undefined, [
ts.createParameter(undefined, undefined, undefined, "require"),
ts.createParameter(undefined, undefined, undefined, "exports")
].concat(importAliasNames), undefined, transformAsynchronousModuleBody(node))
]))
]), node.statements));
}
function collectAsynchronousDependencies(node, includeNonAmdDependencies) {
var aliasedModuleNames = [];
var unaliasedModuleNames = [];
var importAliasNames = [];
for (var _i = 0, _a = node.amdDependencies; _i < _a.length; _i++) {
var amdDependency = _a[_i];
if (amdDependency.name) {
aliasedModuleNames.push(ts.createLiteral(amdDependency.path));
importAliasNames.push(ts.createParameter(undefined, undefined, undefined, amdDependency.name));
}
else {
unaliasedModuleNames.push(ts.createLiteral(amdDependency.path));
}
}
for (var _b = 0, _c = currentModuleInfo.externalImports; _b < _c.length; _b++) {
var importNode = _c[_b];
var externalModuleName = ts.getExternalModuleNameLiteral(importNode, currentSourceFile, host, resolver, compilerOptions);
var importAliasName = ts.getLocalNameForExternalImport(importNode, currentSourceFile);
if (externalModuleName) {
if (includeNonAmdDependencies && importAliasName) {
ts.setEmitFlags(importAliasName, 4);
aliasedModuleNames.push(externalModuleName);
importAliasNames.push(ts.createParameter(undefined, undefined, undefined, importAliasName));
}
else {
unaliasedModuleNames.push(externalModuleName);
}
}
}
return { aliasedModuleNames: aliasedModuleNames, unaliasedModuleNames: unaliasedModuleNames, importAliasNames: importAliasNames };
}
function transformAsynchronousModuleBody(node) {
startLexicalEnvironment();
var statements = [];
var statementOffset = ts.addPrologue(statements, node.statements, !compilerOptions.noImplicitUseStrict, sourceElementVisitor);
if (shouldEmitUnderscoreUnderscoreESModule()) {
ts.append(statements, createUnderscoreUnderscoreESModule());
}
ts.append(statements, ts.visitNode(currentModuleInfo.externalHelpersImportDeclaration, sourceElementVisitor, ts.isStatement));
ts.addRange(statements, ts.visitNodes(node.statements, sourceElementVisitor, ts.isStatement, statementOffset));
addExportEqualsIfNeeded(statements, true);
ts.addRange(statements, endLexicalEnvironment());
var body = ts.createBlock(statements, true);
if (currentModuleInfo.hasExportStarsToExportValues && !compilerOptions.importHelpers) {
ts.addEmitHelper(body, exportStarHelper);
}
if (needUMDDynamicImportHelper) {
ts.addEmitHelper(body, dynamicImportUMDHelper);
}
return body;
}
function addExportEqualsIfNeeded(statements, emitAsReturn) {
if (currentModuleInfo.exportEquals) {
var expressionResult = ts.visitNode(currentModuleInfo.exportEquals.expression, importCallExpressionVisitor);
if (expressionResult) {
if (emitAsReturn) {
var statement = ts.createReturn(expressionResult);
ts.setTextRange(statement, currentModuleInfo.exportEquals);
ts.setEmitFlags(statement, 384 | 1536);
statements.push(statement);
}
else {
var statement = ts.createStatement(ts.createAssignment(ts.createPropertyAccess(ts.createIdentifier("module"), "exports"), expressionResult));
ts.setTextRange(statement, currentModuleInfo.exportEquals);
ts.setEmitFlags(statement, 1536);
statements.push(statement);
}
}
}
}
function sourceElementVisitor(node) {
switch (node.kind) {
case 238:
return visitImportDeclaration(node);
case 237:
return visitImportEqualsDeclaration(node);
case 244:
return visitExportDeclaration(node);
case 243:
return visitExportAssignment(node);
case 208:
return visitVariableStatement(node);
case 228:
return visitFunctionDeclaration(node);
case 229:
return visitClassDeclaration(node);
case 290:
return visitMergeDeclarationMarker(node);
case 291:
return visitEndOfDeclarationMarker(node);
default:
return ts.visitEachChild(node, importCallExpressionVisitor, context);
}
}
function importCallExpressionVisitor(node) {
if (!(node.transformFlags & 67108864)) {
return node;
}
if (ts.isImportCall(node)) {
return visitImportCallExpression(node);
}
else {
return ts.visitEachChild(node, importCallExpressionVisitor, context);
}
}
function visitImportCallExpression(node) {
var argument = ts.visitNode(ts.firstOrUndefined(node.arguments), importCallExpressionVisitor);
var containsLexicalThis = !!(node.transformFlags & 16384);
switch (compilerOptions.module) {
case ts.ModuleKind.AMD:
return createImportCallExpressionAMD(argument, containsLexicalThis);
case ts.ModuleKind.UMD:
return createImportCallExpressionUMD(argument, containsLexicalThis);
case ts.ModuleKind.CommonJS:
default:
return createImportCallExpressionCommonJS(argument, containsLexicalThis);
}
}
function createImportCallExpressionUMD(arg, containsLexicalThis) {
needUMDDynamicImportHelper = true;
if (ts.isSimpleCopiableExpression(arg)) {
var argClone = ts.isGeneratedIdentifier(arg) ? arg : ts.isStringLiteral(arg) ? ts.createLiteral(arg) : ts.setEmitFlags(ts.setTextRange(ts.getSynthesizedClone(arg), arg), 1536);
return ts.createConditional(ts.createIdentifier("__syncRequire"), createImportCallExpressionCommonJS(arg, containsLexicalThis), createImportCallExpressionAMD(argClone, containsLexicalThis));
}
else {
var temp = ts.createTempVariable(hoistVariableDeclaration);
return ts.createComma(ts.createAssignment(temp, arg), ts.createConditional(ts.createIdentifier("__syncRequire"), createImportCallExpressionCommonJS(temp, containsLexicalThis), createImportCallExpressionAMD(temp, containsLexicalThis)));
}
}
function createImportCallExpressionAMD(arg, containsLexicalThis) {
var resolve = ts.createUniqueName("resolve");
var reject = ts.createUniqueName("reject");
var parameters = [
ts.createParameter(undefined, undefined, undefined, resolve),
ts.createParameter(undefined, undefined, undefined, reject)
];
var body = ts.createBlock([
ts.createStatement(ts.createCall(ts.createIdentifier("require"), undefined, [ts.createArrayLiteral([arg || ts.createOmittedExpression()]), resolve, reject]))
]);
var func;
if (languageVersion >= 2) {
func = ts.createArrowFunction(undefined, undefined, parameters, undefined, undefined, body);
}
else {
func = ts.createFunctionExpression(undefined, undefined, undefined, undefined, parameters, undefined, body);
if (containsLexicalThis) {
ts.setEmitFlags(func, 8);
}
}
return ts.createNew(ts.createIdentifier("Promise"), undefined, [func]);
}
function createImportCallExpressionCommonJS(arg, containsLexicalThis) {
var promiseResolveCall = ts.createCall(ts.createPropertyAccess(ts.createIdentifier("Promise"), "resolve"), undefined, []);
var requireCall = ts.createCall(ts.createIdentifier("require"), undefined, arg ? [arg] : []);
var func;
if (languageVersion >= 2) {
func = ts.createArrowFunction(undefined, undefined, [], undefined, undefined, requireCall);
}
else {
func = ts.createFunctionExpression(undefined, undefined, undefined, undefined, [], undefined, ts.createBlock([ts.createReturn(requireCall)]));
if (containsLexicalThis) {
ts.setEmitFlags(func, 8);
}
}
return ts.createCall(ts.createPropertyAccess(promiseResolveCall, "then"), undefined, [func]);
}
function visitImportDeclaration(node) {
var statements;
var namespaceDeclaration = ts.getNamespaceDeclarationNode(node);
if (moduleKind !== ts.ModuleKind.AMD) {
if (!node.importClause) {
return ts.setTextRange(ts.createStatement(createRequireCall(node)), node);
}
else {
var variables = [];
if (namespaceDeclaration && !ts.isDefaultImport(node)) {
variables.push(ts.createVariableDeclaration(ts.getSynthesizedClone(namespaceDeclaration.name), undefined, createRequireCall(node)));
}
else {
variables.push(ts.createVariableDeclaration(ts.getGeneratedNameForNode(node), undefined, createRequireCall(node)));
if (namespaceDeclaration && ts.isDefaultImport(node)) {
variables.push(ts.createVariableDeclaration(ts.getSynthesizedClone(namespaceDeclaration.name), undefined, ts.getGeneratedNameForNode(node)));
}
}
statements = ts.append(statements, ts.setTextRange(ts.createVariableStatement(undefined, ts.createVariableDeclarationList(variables, languageVersion >= 2 ? 2 : 0)), node));
}
}
else if (namespaceDeclaration && ts.isDefaultImport(node)) {
statements = ts.append(statements, ts.createVariableStatement(undefined, ts.createVariableDeclarationList([
ts.setTextRange(ts.createVariableDeclaration(ts.getSynthesizedClone(namespaceDeclaration.name), undefined, ts.getGeneratedNameForNode(node)), node)
], languageVersion >= 2 ? 2 : 0)));
}
if (hasAssociatedEndOfDeclarationMarker(node)) {
var id = ts.getOriginalNodeId(node);
deferredExports[id] = appendExportsOfImportDeclaration(deferredExports[id], node);
}
else {
statements = appendExportsOfImportDeclaration(statements, node);
}
return ts.singleOrMany(statements);
}
function createRequireCall(importNode) {
var moduleName = ts.getExternalModuleNameLiteral(importNode, currentSourceFile, host, resolver, compilerOptions);
var args = [];
if (moduleName) {
args.push(moduleName);
}
return ts.createCall(ts.createIdentifier("require"), undefined, args);
}
function visitImportEqualsDeclaration(node) {
ts.Debug.assert(ts.isExternalModuleImportEqualsDeclaration(node), "import= for internal module references should be handled in an earlier transformer.");
var statements;
if (moduleKind !== ts.ModuleKind.AMD) {
if (ts.hasModifier(node, 1)) {
statements = ts.append(statements, ts.setTextRange(ts.createStatement(createExportExpression(node.name, createRequireCall(node))), node));
}
else {
statements = ts.append(statements, ts.setTextRange(ts.createVariableStatement(undefined, ts.createVariableDeclarationList([
ts.createVariableDeclaration(ts.getSynthesizedClone(node.name), undefined, createRequireCall(node))
], languageVersion >= 2 ? 2 : 0)), node));
}
}
else {
if (ts.hasModifier(node, 1)) {
statements = ts.append(statements, ts.setTextRange(ts.createStatement(createExportExpression(ts.getExportName(node), ts.getLocalName(node))), node));
}
}
if (hasAssociatedEndOfDeclarationMarker(node)) {
var id = ts.getOriginalNodeId(node);
deferredExports[id] = appendExportsOfImportEqualsDeclaration(deferredExports[id], node);
}
else {
statements = appendExportsOfImportEqualsDeclaration(statements, node);
}
return ts.singleOrMany(statements);
}
function visitExportDeclaration(node) {
if (!node.moduleSpecifier) {
return undefined;
}
var generatedName = ts.getGeneratedNameForNode(node);
if (node.exportClause) {
var statements = [];
if (moduleKind !== ts.ModuleKind.AMD) {
statements.push(ts.setTextRange(ts.createVariableStatement(undefined, ts.createVariableDeclarationList([
ts.createVariableDeclaration(generatedName, undefined, createRequireCall(node))
])), node));
}
for (var _i = 0, _a = node.exportClause.elements; _i < _a.length; _i++) {
var specifier = _a[_i];
var exportedValue = ts.createPropertyAccess(generatedName, specifier.propertyName || specifier.name);
statements.push(ts.setTextRange(ts.createStatement(createExportExpression(ts.getExportName(specifier), exportedValue)), specifier));
}
return ts.singleOrMany(statements);
}
else {
return ts.setTextRange(ts.createStatement(createExportStarHelper(context, moduleKind !== ts.ModuleKind.AMD ? createRequireCall(node) : generatedName)), node);
}
}
function visitExportAssignment(node) {
if (node.isExportEquals) {
return undefined;
}
var statements;
var original = node.original;
if (original && hasAssociatedEndOfDeclarationMarker(original)) {
var id = ts.getOriginalNodeId(node);
deferredExports[id] = appendExportStatement(deferredExports[id], ts.createIdentifier("default"), ts.visitNode(node.expression, importCallExpressionVisitor), node, true);
}
else {
statements = appendExportStatement(statements, ts.createIdentifier("default"), ts.visitNode(node.expression, importCallExpressionVisitor), node, true);
}
return ts.singleOrMany(statements);
}
function visitFunctionDeclaration(node) {
var statements;
if (ts.hasModifier(node, 1)) {
statements = ts.append(statements, ts.setOriginalNode(ts.setTextRange(ts.createFunctionDeclaration(undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.asteriskToken, ts.getDeclarationName(node, true, true), undefined, ts.visitNodes(node.parameters, importCallExpressionVisitor), undefined, ts.visitEachChild(node.body, importCallExpressionVisitor, context)), node), node));
}
else {
statements = ts.append(statements, ts.visitEachChild(node, importCallExpressionVisitor, context));
}
if (hasAssociatedEndOfDeclarationMarker(node)) {
var id = ts.getOriginalNodeId(node);
deferredExports[id] = appendExportsOfHoistedDeclaration(deferredExports[id], node);
}
else {
statements = appendExportsOfHoistedDeclaration(statements, node);
}
return ts.singleOrMany(statements);
}
function visitClassDeclaration(node) {
var statements;
if (ts.hasModifier(node, 1)) {
statements = ts.append(statements, ts.setOriginalNode(ts.setTextRange(ts.createClassDeclaration(undefined, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), ts.getDeclarationName(node, true, true), undefined, ts.visitNodes(node.heritageClauses, importCallExpressionVisitor), ts.visitNodes(node.members, importCallExpressionVisitor)), node), node));
}
else {
statements = ts.append(statements, ts.visitEachChild(node, importCallExpressionVisitor, context));
}
if (hasAssociatedEndOfDeclarationMarker(node)) {
var id = ts.getOriginalNodeId(node);
deferredExports[id] = appendExportsOfHoistedDeclaration(deferredExports[id], node);
}
else {
statements = appendExportsOfHoistedDeclaration(statements, node);
}
return ts.singleOrMany(statements);
}
function visitVariableStatement(node) {
var statements;
var variables;
var expressions;
if (ts.hasModifier(node, 1)) {
var modifiers = void 0;
for (var _i = 0, _a = node.declarationList.declarations; _i < _a.length; _i++) {
var variable = _a[_i];
if (ts.isIdentifier(variable.name) && ts.isLocalName(variable.name)) {
if (!modifiers) {
modifiers = ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier);
}
variables = ts.append(variables, variable);
}
else if (variable.initializer) {
expressions = ts.append(expressions, transformInitializedVariable(variable));
}
}
if (variables) {
statements = ts.append(statements, ts.updateVariableStatement(node, modifiers, ts.updateVariableDeclarationList(node.declarationList, variables)));
}
if (expressions) {
statements = ts.append(statements, ts.setTextRange(ts.createStatement(ts.inlineExpressions(expressions)), node));
}
}
else {
statements = ts.append(statements, ts.visitEachChild(node, importCallExpressionVisitor, context));
}
if (hasAssociatedEndOfDeclarationMarker(node)) {
var id = ts.getOriginalNodeId(node);
deferredExports[id] = appendExportsOfVariableStatement(deferredExports[id], node);
}
else {
statements = appendExportsOfVariableStatement(statements, node);
}
return ts.singleOrMany(statements);
}
function transformInitializedVariable(node) {
if (ts.isBindingPattern(node.name)) {
return ts.flattenDestructuringAssignment(ts.visitNode(node, importCallExpressionVisitor), undefined, context, 0, false, createExportExpression);
}
else {
return ts.createAssignment(ts.setTextRange(ts.createPropertyAccess(ts.createIdentifier("exports"), node.name), node.name), ts.visitNode(node.initializer, importCallExpressionVisitor));
}
}
function visitMergeDeclarationMarker(node) {
if (hasAssociatedEndOfDeclarationMarker(node) && node.original.kind === 208) {
var id = ts.getOriginalNodeId(node);
deferredExports[id] = appendExportsOfVariableStatement(deferredExports[id], node.original);
}
return node;
}
function hasAssociatedEndOfDeclarationMarker(node) {
return (ts.getEmitFlags(node) & 4194304) !== 0;
}
function visitEndOfDeclarationMarker(node) {
var id = ts.getOriginalNodeId(node);
var statements = deferredExports[id];
if (statements) {
delete deferredExports[id];
return ts.append(statements, node);
}
return node;
}
function appendExportsOfImportDeclaration(statements, decl) {
if (currentModuleInfo.exportEquals) {
return statements;
}
var importClause = decl.importClause;
if (!importClause) {
return statements;
}
if (importClause.name) {
statements = appendExportsOfDeclaration(statements, importClause);
}
var namedBindings = importClause.namedBindings;
if (namedBindings) {
switch (namedBindings.kind) {
case 240:
statements = appendExportsOfDeclaration(statements, namedBindings);
break;
case 241:
for (var _i = 0, _a = namedBindings.elements; _i < _a.length; _i++) {
var importBinding = _a[_i];
statements = appendExportsOfDeclaration(statements, importBinding);
}
break;
}
}
return statements;
}
function appendExportsOfImportEqualsDeclaration(statements, decl) {
if (currentModuleInfo.exportEquals) {
return statements;
}
return appendExportsOfDeclaration(statements, decl);
}
function appendExportsOfVariableStatement(statements, node) {
if (currentModuleInfo.exportEquals) {
return statements;
}
for (var _i = 0, _a = node.declarationList.declarations; _i < _a.length; _i++) {
var decl = _a[_i];
statements = appendExportsOfBindingElement(statements, decl);
}
return statements;
}
function appendExportsOfBindingElement(statements, decl) {
if (currentModuleInfo.exportEquals) {
return statements;
}
if (ts.isBindingPattern(decl.name)) {
for (var _i = 0, _a = decl.name.elements; _i < _a.length; _i++) {
var element = _a[_i];
if (!ts.isOmittedExpression(element)) {
statements = appendExportsOfBindingElement(statements, element);
}
}
}
else if (!ts.isGeneratedIdentifier(decl.name)) {
statements = appendExportsOfDeclaration(statements, decl);
}
return statements;
}
function appendExportsOfHoistedDeclaration(statements, decl) {
if (currentModuleInfo.exportEquals) {
return statements;
}
if (ts.hasModifier(decl, 1)) {
var exportName = ts.hasModifier(decl, 512) ? ts.createIdentifier("default") : ts.getDeclarationName(decl);
statements = appendExportStatement(statements, exportName, ts.getLocalName(decl), decl);
}
if (decl.name) {
statements = appendExportsOfDeclaration(statements, decl);
}
return statements;
}
function appendExportsOfDeclaration(statements, decl) {
var name = ts.getDeclarationName(decl);
var exportSpecifiers = currentModuleInfo.exportSpecifiers.get(ts.idText(name));
if (exportSpecifiers) {
for (var _i = 0, exportSpecifiers_1 = exportSpecifiers; _i < exportSpecifiers_1.length; _i++) {
var exportSpecifier = exportSpecifiers_1[_i];
statements = appendExportStatement(statements, exportSpecifier.name, name, exportSpecifier.name);
}
}
return statements;
}
function appendExportStatement(statements, exportName, expression, location, allowComments) {
statements = ts.append(statements, createExportStatement(exportName, expression, location, allowComments));
return statements;
}
function createUnderscoreUnderscoreESModule() {
var statement;
if (languageVersion === 0) {
statement = ts.createStatement(createExportExpression(ts.createIdentifier("__esModule"), ts.createLiteral(true)));
}
else {
statement = ts.createStatement(ts.createCall(ts.createPropertyAccess(ts.createIdentifier("Object"), "defineProperty"), undefined, [
ts.createIdentifier("exports"),
ts.createLiteral("__esModule"),
ts.createObjectLiteral([
ts.createPropertyAssignment("value", ts.createLiteral(true))
])
]));
}
ts.setEmitFlags(statement, 1048576);
return statement;
}
function createExportStatement(name, value, location, allowComments) {
var statement = ts.setTextRange(ts.createStatement(createExportExpression(name, value)), location);
ts.startOnNewLine(statement);
if (!allowComments) {
ts.setEmitFlags(statement, 1536);
}
return statement;
}
function createExportExpression(name, value, location) {
return ts.setTextRange(ts.createAssignment(ts.createPropertyAccess(ts.createIdentifier("exports"), ts.getSynthesizedClone(name)), value), location);
}
function modifierVisitor(node) {
switch (node.kind) {
case 84:
case 79:
return undefined;
}
return node;
}
function onEmitNode(hint, node, emitCallback) {
if (node.kind === 265) {
currentSourceFile = node;
currentModuleInfo = moduleInfoMap[ts.getOriginalNodeId(currentSourceFile)];
noSubstitution = [];
previousOnEmitNode(hint, node, emitCallback);
currentSourceFile = undefined;
currentModuleInfo = undefined;
noSubstitution = undefined;
}
else {
previousOnEmitNode(hint, node, emitCallback);
}
}
function onSubstituteNode(hint, node) {
node = previousOnSubstituteNode(hint, node);
if (node.id && noSubstitution[node.id]) {
return node;
}
if (hint === 1) {
return substituteExpression(node);
}
else if (ts.isShorthandPropertyAssignment(node)) {
return substituteShorthandPropertyAssignment(node);
}
return node;
}
function substituteShorthandPropertyAssignment(node) {
var name = node.name;
var exportedOrImportedName = substituteExpressionIdentifier(name);
if (exportedOrImportedName !== name) {
if (node.objectAssignmentInitializer) {
var initializer = ts.createAssignment(exportedOrImportedName, node.objectAssignmentInitializer);
return ts.setTextRange(ts.createPropertyAssignment(name, initializer), node);
}
return ts.setTextRange(ts.createPropertyAssignment(name, exportedOrImportedName), node);
}
return node;
}
function substituteExpression(node) {
switch (node.kind) {
case 71:
return substituteExpressionIdentifier(node);
case 194:
return substituteBinaryExpression(node);
case 193:
case 192:
return substituteUnaryExpression(node);
}
return node;
}
function substituteExpressionIdentifier(node) {
if (ts.getEmitFlags(node) & 4096) {
var externalHelpersModuleName = ts.getExternalHelpersModuleName(currentSourceFile);
if (externalHelpersModuleName) {
return ts.createPropertyAccess(externalHelpersModuleName, node);
}
return node;
}
if (!ts.isGeneratedIdentifier(node) && !ts.isLocalName(node)) {
var exportContainer = resolver.getReferencedExportContainer(node, ts.isExportName(node));
if (exportContainer && exportContainer.kind === 265) {
return ts.setTextRange(ts.createPropertyAccess(ts.createIdentifier("exports"), ts.getSynthesizedClone(node)), node);
}
var importDeclaration = resolver.getReferencedImportDeclaration(node);
if (importDeclaration) {
if (ts.isImportClause(importDeclaration)) {
return ts.setTextRange(ts.createPropertyAccess(ts.getGeneratedNameForNode(importDeclaration.parent), ts.createIdentifier("default")), node);
}
else if (ts.isImportSpecifier(importDeclaration)) {
var name = importDeclaration.propertyName || importDeclaration.name;
return ts.setTextRange(ts.createPropertyAccess(ts.getGeneratedNameForNode(importDeclaration.parent.parent.parent), ts.getSynthesizedClone(name)), node);
}
}
}
return node;
}
function substituteBinaryExpression(node) {
if (ts.isAssignmentOperator(node.operatorToken.kind)
&& ts.isIdentifier(node.left)
&& !ts.isGeneratedIdentifier(node.left)
&& !ts.isLocalName(node.left)
&& !ts.isDeclarationNameOfEnumOrNamespace(node.left)) {
var exportedNames = getExports(node.left);
if (exportedNames) {
var expression = node;
for (var _i = 0, exportedNames_1 = exportedNames; _i < exportedNames_1.length; _i++) {
var exportName = exportedNames_1[_i];
noSubstitution[ts.getNodeId(expression)] = true;
expression = createExportExpression(exportName, expression, node);
}
return expression;
}
}
return node;
}
function substituteUnaryExpression(node) {
if ((node.operator === 43 || node.operator === 44)
&& ts.isIdentifier(node.operand)
&& !ts.isGeneratedIdentifier(node.operand)
&& !ts.isLocalName(node.operand)
&& !ts.isDeclarationNameOfEnumOrNamespace(node.operand)) {
var exportedNames = getExports(node.operand);
if (exportedNames) {
var expression = node.kind === 193
? ts.setTextRange(ts.createBinary(node.operand, ts.createToken(node.operator === 43 ? 59 : 60), ts.createLiteral(1)), node)
: node;
for (var _i = 0, exportedNames_2 = exportedNames; _i < exportedNames_2.length; _i++) {
var exportName = exportedNames_2[_i];
noSubstitution[ts.getNodeId(expression)] = true;
expression = createExportExpression(exportName, expression);
}
return expression;
}
}
return node;
}
function getExports(name) {
if (!ts.isGeneratedIdentifier(name)) {
var valueDeclaration = resolver.getReferencedImportDeclaration(name)
|| resolver.getReferencedValueDeclaration(name);
if (valueDeclaration) {
return currentModuleInfo
&& currentModuleInfo.exportedBindings[ts.getOriginalNodeId(valueDeclaration)];
}
}
}
}
ts.transformModule = transformModule;
var exportStarHelper = {
name: "typescript:export-star",
scoped: true,
text: "\n function __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n }\n "
};
function createExportStarHelper(context, module) {
var compilerOptions = context.getCompilerOptions();
return compilerOptions.importHelpers
? ts.createCall(ts.getHelperName("__exportStar"), undefined, [module, ts.createIdentifier("exports")])
: ts.createCall(ts.createIdentifier("__export"), undefined, [module]);
}
var dynamicImportUMDHelper = {
name: "typescript:dynamicimport-sync-require",
scoped: true,
text: "\n var __syncRequire = typeof module === \"object\" && typeof module.exports === \"object\";"
};
})(ts || (ts = {}));
var ts;
(function (ts) {
function transformSystemModule(context) {
var startLexicalEnvironment = context.startLexicalEnvironment, endLexicalEnvironment = context.endLexicalEnvironment, hoistVariableDeclaration = context.hoistVariableDeclaration;
var compilerOptions = context.getCompilerOptions();
var resolver = context.getEmitResolver();
var host = context.getEmitHost();
var previousOnSubstituteNode = context.onSubstituteNode;
var previousOnEmitNode = context.onEmitNode;
context.onSubstituteNode = onSubstituteNode;
context.onEmitNode = onEmitNode;
context.enableSubstitution(71);
context.enableSubstitution(194);
context.enableSubstitution(192);
context.enableSubstitution(193);
context.enableEmitNotification(265);
var moduleInfoMap = [];
var deferredExports = [];
var exportFunctionsMap = [];
var noSubstitutionMap = [];
var currentSourceFile;
var moduleInfo;
var exportFunction;
var contextObject;
var hoistedStatements;
var enclosingBlockScopedContainer;
var noSubstitution;
return transformSourceFile;
function transformSourceFile(node) {
if (node.isDeclarationFile || !(ts.isEffectiveExternalModule(node, compilerOptions) || node.transformFlags & 67108864)) {
return node;
}
var id = ts.getOriginalNodeId(node);
currentSourceFile = node;
enclosingBlockScopedContainer = node;
moduleInfo = moduleInfoMap[id] = ts.collectExternalModuleInfo(node, resolver, compilerOptions);
exportFunction = ts.createUniqueName("exports");
exportFunctionsMap[id] = exportFunction;
contextObject = ts.createUniqueName("context");
var dependencyGroups = collectDependencyGroups(moduleInfo.externalImports);
var moduleBodyBlock = createSystemModuleBody(node, dependencyGroups);
var moduleBodyFunction = ts.createFunctionExpression(undefined, undefined, undefined, undefined, [
ts.createParameter(undefined, undefined, undefined, exportFunction),
ts.createParameter(undefined, undefined, undefined, contextObject)
], undefined, moduleBodyBlock);
var moduleName = ts.tryGetModuleNameFromFile(node, host, compilerOptions);
var dependencies = ts.createArrayLiteral(ts.map(dependencyGroups, function (dependencyGroup) { return dependencyGroup.name; }));
var updated = ts.setEmitFlags(ts.updateSourceFileNode(node, ts.setTextRange(ts.createNodeArray([
ts.createStatement(ts.createCall(ts.createPropertyAccess(ts.createIdentifier("System"), "register"), undefined, moduleName
? [moduleName, dependencies, moduleBodyFunction]
: [dependencies, moduleBodyFunction]))
]), node.statements)), 1024);
if (!(compilerOptions.outFile || compilerOptions.out)) {
ts.moveEmitHelpers(updated, moduleBodyBlock, function (helper) { return !helper.scoped; });
}
if (noSubstitution) {
noSubstitutionMap[id] = noSubstitution;
noSubstitution = undefined;
}
currentSourceFile = undefined;
moduleInfo = undefined;
exportFunction = undefined;
contextObject = undefined;
hoistedStatements = undefined;
enclosingBlockScopedContainer = undefined;
return ts.aggregateTransformFlags(updated);
}
function collectDependencyGroups(externalImports) {
var groupIndices = ts.createMap();
var dependencyGroups = [];
for (var i = 0; i < externalImports.length; i++) {
var externalImport = externalImports[i];
var externalModuleName = ts.getExternalModuleNameLiteral(externalImport, currentSourceFile, host, resolver, compilerOptions);
if (externalModuleName) {
var text = externalModuleName.text;
var groupIndex = groupIndices.get(text);
if (groupIndex !== undefined) {
dependencyGroups[groupIndex].externalImports.push(externalImport);
}
else {
groupIndices.set(text, dependencyGroups.length);
dependencyGroups.push({
name: externalModuleName,
externalImports: [externalImport]
});
}
}
}
return dependencyGroups;
}
function createSystemModuleBody(node, dependencyGroups) {
var statements = [];
startLexicalEnvironment();
var ensureUseStrict = compilerOptions.alwaysStrict || (!compilerOptions.noImplicitUseStrict && ts.isExternalModule(currentSourceFile));
var statementOffset = ts.addPrologue(statements, node.statements, ensureUseStrict, sourceElementVisitor);
statements.push(ts.createVariableStatement(undefined, ts.createVariableDeclarationList([
ts.createVariableDeclaration("__moduleName", undefined, ts.createLogicalAnd(contextObject, ts.createPropertyAccess(contextObject, "id")))
])));
ts.visitNode(moduleInfo.externalHelpersImportDeclaration, sourceElementVisitor, ts.isStatement);
var executeStatements = ts.visitNodes(node.statements, sourceElementVisitor, ts.isStatement, statementOffset);
ts.addRange(statements, hoistedStatements);
ts.addRange(statements, endLexicalEnvironment());
var exportStarFunction = addExportStarIfNeeded(statements);
var moduleObject = ts.createObjectLiteral([
ts.createPropertyAssignment("setters", createSettersArray(exportStarFunction, dependencyGroups)),
ts.createPropertyAssignment("execute", ts.createFunctionExpression(undefined, undefined, undefined, undefined, [], undefined, ts.createBlock(executeStatements, true)))
]);
moduleObject.multiLine = true;
statements.push(ts.createReturn(moduleObject));
return ts.createBlock(statements, true);
}
function addExportStarIfNeeded(statements) {
if (!moduleInfo.hasExportStarsToExportValues) {
return;
}
if (!moduleInfo.exportedNames && moduleInfo.exportSpecifiers.size === 0) {
var hasExportDeclarationWithExportClause = false;
for (var _i = 0, _a = moduleInfo.externalImports; _i < _a.length; _i++) {
var externalImport = _a[_i];
if (externalImport.kind === 244 && externalImport.exportClause) {
hasExportDeclarationWithExportClause = true;
break;
}
}
if (!hasExportDeclarationWithExportClause) {
var exportStarFunction_1 = createExportStarFunction(undefined);
statements.push(exportStarFunction_1);
return exportStarFunction_1.name;
}
}
var exportedNames = [];
if (moduleInfo.exportedNames) {
for (var _b = 0, _c = moduleInfo.exportedNames; _b < _c.length; _b++) {
var exportedLocalName = _c[_b];
if (exportedLocalName.escapedText === "default") {
continue;
}
exportedNames.push(ts.createPropertyAssignment(ts.createLiteral(exportedLocalName), ts.createTrue()));
}
}
for (var _d = 0, _e = moduleInfo.externalImports; _d < _e.length; _d++) {
var externalImport = _e[_d];
if (externalImport.kind !== 244) {
continue;
}
var exportDecl = externalImport;
if (!exportDecl.exportClause) {
continue;
}
for (var _f = 0, _g = exportDecl.exportClause.elements; _f < _g.length; _f++) {
var element = _g[_f];
exportedNames.push(ts.createPropertyAssignment(ts.createLiteral(ts.idText(element.name || element.propertyName)), ts.createTrue()));
}
}
var exportedNamesStorageRef = ts.createUniqueName("exportedNames");
statements.push(ts.createVariableStatement(undefined, ts.createVariableDeclarationList([
ts.createVariableDeclaration(exportedNamesStorageRef, undefined, ts.createObjectLiteral(exportedNames, true))
])));
var exportStarFunction = createExportStarFunction(exportedNamesStorageRef);
statements.push(exportStarFunction);
return exportStarFunction.name;
}
function createExportStarFunction(localNames) {
var exportStarFunction = ts.createUniqueName("exportStar");
var m = ts.createIdentifier("m");
var n = ts.createIdentifier("n");
var exports = ts.createIdentifier("exports");
var condition = ts.createStrictInequality(n, ts.createLiteral("default"));
if (localNames) {
condition = ts.createLogicalAnd(condition, ts.createLogicalNot(ts.createCall(ts.createPropertyAccess(localNames, "hasOwnProperty"), undefined, [n])));
}
return ts.createFunctionDeclaration(undefined, undefined, undefined, exportStarFunction, undefined, [ts.createParameter(undefined, undefined, undefined, m)], undefined, ts.createBlock([
ts.createVariableStatement(undefined, ts.createVariableDeclarationList([
ts.createVariableDeclaration(exports, undefined, ts.createObjectLiteral([]))
])),
ts.createForIn(ts.createVariableDeclarationList([
ts.createVariableDeclaration(n, undefined)
]), m, ts.createBlock([
ts.setEmitFlags(ts.createIf(condition, ts.createStatement(ts.createAssignment(ts.createElementAccess(exports, n), ts.createElementAccess(m, n)))), 1)
])),
ts.createStatement(ts.createCall(exportFunction, undefined, [exports]))
], true));
}
function createSettersArray(exportStarFunction, dependencyGroups) {
var setters = [];
for (var _i = 0, dependencyGroups_1 = dependencyGroups; _i < dependencyGroups_1.length; _i++) {
var group = dependencyGroups_1[_i];
var localName = ts.forEach(group.externalImports, function (i) { return ts.getLocalNameForExternalImport(i, currentSourceFile); });
var parameterName = localName ? ts.getGeneratedNameForNode(localName) : ts.createUniqueName("");
var statements = [];
for (var _a = 0, _b = group.externalImports; _a < _b.length; _a++) {
var entry = _b[_a];
var importVariableName = ts.getLocalNameForExternalImport(entry, currentSourceFile);
switch (entry.kind) {
case 238:
if (!entry.importClause) {
break;
}
case 237:
ts.Debug.assert(importVariableName !== undefined);
statements.push(ts.createStatement(ts.createAssignment(importVariableName, parameterName)));
break;
case 244:
ts.Debug.assert(importVariableName !== undefined);
if (entry.exportClause) {
var properties = [];
for (var _c = 0, _d = entry.exportClause.elements; _c < _d.length; _c++) {
var e = _d[_c];
properties.push(ts.createPropertyAssignment(ts.createLiteral(ts.idText(e.name)), ts.createElementAccess(parameterName, ts.createLiteral(ts.idText(e.propertyName || e.name)))));
}
statements.push(ts.createStatement(ts.createCall(exportFunction, undefined, [ts.createObjectLiteral(properties, true)])));
}
else {
statements.push(ts.createStatement(ts.createCall(exportStarFunction, undefined, [parameterName])));
}
break;
}
}
setters.push(ts.createFunctionExpression(undefined, undefined, undefined, undefined, [ts.createParameter(undefined, undefined, undefined, parameterName)], undefined, ts.createBlock(statements, true)));
}
return ts.createArrayLiteral(setters, true);
}
function sourceElementVisitor(node) {
switch (node.kind) {
case 238:
return visitImportDeclaration(node);
case 237:
return visitImportEqualsDeclaration(node);
case 244:
return undefined;
case 243:
return visitExportAssignment(node);
default:
return nestedElementVisitor(node);
}
}
function visitImportDeclaration(node) {
var statements;
if (node.importClause) {
hoistVariableDeclaration(ts.getLocalNameForExternalImport(node, currentSourceFile));
}
if (hasAssociatedEndOfDeclarationMarker(node)) {
var id = ts.getOriginalNodeId(node);
deferredExports[id] = appendExportsOfImportDeclaration(deferredExports[id], node);
}
else {
statements = appendExportsOfImportDeclaration(statements, node);
}
return ts.singleOrMany(statements);
}
function visitImportEqualsDeclaration(node) {
ts.Debug.assert(ts.isExternalModuleImportEqualsDeclaration(node), "import= for internal module references should be handled in an earlier transformer.");
var statements;
hoistVariableDeclaration(ts.getLocalNameForExternalImport(node, currentSourceFile));
if (hasAssociatedEndOfDeclarationMarker(node)) {
var id = ts.getOriginalNodeId(node);
deferredExports[id] = appendExportsOfImportEqualsDeclaration(deferredExports[id], node);
}
else {
statements = appendExportsOfImportEqualsDeclaration(statements, node);
}
return ts.singleOrMany(statements);
}
function visitExportAssignment(node) {
if (node.isExportEquals) {
return undefined;
}
var expression = ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression);
var original = node.original;
if (original && hasAssociatedEndOfDeclarationMarker(original)) {
var id = ts.getOriginalNodeId(node);
deferredExports[id] = appendExportStatement(deferredExports[id], ts.createIdentifier("default"), expression, true);
}
else {
return createExportStatement(ts.createIdentifier("default"), expression, true);
}
}
function visitFunctionDeclaration(node) {
if (ts.hasModifier(node, 1)) {
hoistedStatements = ts.append(hoistedStatements, ts.updateFunctionDeclaration(node, node.decorators, ts.visitNodes(node.modifiers, modifierVisitor, ts.isModifier), node.asteriskToken, ts.getDeclarationName(node, true, true), undefined, ts.visitNodes(node.parameters, destructuringAndImportCallVisitor, ts.isParameterDeclaration), undefined, ts.visitNode(node.body, destructuringAndImportCallVisitor, ts.isBlock)));
}
else {
hoistedStatements = ts.append(hoistedStatements, ts.visitEachChild(node, destructuringAndImportCallVisitor, context));
}
if (hasAssociatedEndOfDeclarationMarker(node)) {
var id = ts.getOriginalNodeId(node);
deferredExports[id] = appendExportsOfHoistedDeclaration(deferredExports[id], node);
}
else {
hoistedStatements = appendExportsOfHoistedDeclaration(hoistedStatements, node);
}
return undefined;
}
function visitClassDeclaration(node) {
var statements;
var name = ts.getLocalName(node);
hoistVariableDeclaration(name);
statements = ts.append(statements, ts.setTextRange(ts.createStatement(ts.createAssignment(name, ts.setTextRange(ts.createClassExpression(undefined, node.name, undefined, ts.visitNodes(node.heritageClauses, destructuringAndImportCallVisitor, ts.isHeritageClause), ts.visitNodes(node.members, destructuringAndImportCallVisitor, ts.isClassElement)), node))), node));
if (hasAssociatedEndOfDeclarationMarker(node)) {
var id = ts.getOriginalNodeId(node);
deferredExports[id] = appendExportsOfHoistedDeclaration(deferredExports[id], node);
}
else {
statements = appendExportsOfHoistedDeclaration(statements, node);
}
return ts.singleOrMany(statements);
}
function visitVariableStatement(node) {
if (!shouldHoistVariableDeclarationList(node.declarationList)) {
return ts.visitNode(node, destructuringAndImportCallVisitor, ts.isStatement);
}
var expressions;
var isExportedDeclaration = ts.hasModifier(node, 1);
var isMarkedDeclaration = hasAssociatedEndOfDeclarationMarker(node);
for (var _i = 0, _a = node.declarationList.declarations; _i < _a.length; _i++) {
var variable = _a[_i];
if (variable.initializer) {
expressions = ts.append(expressions, transformInitializedVariable(variable, isExportedDeclaration && !isMarkedDeclaration));
}
else {
hoistBindingElement(variable);
}
}
var statements;
if (expressions) {
statements = ts.append(statements, ts.setTextRange(ts.createStatement(ts.inlineExpressions(expressions)), node));
}
if (isMarkedDeclaration) {
var id = ts.getOriginalNodeId(node);
deferredExports[id] = appendExportsOfVariableStatement(deferredExports[id], node, isExportedDeclaration);
}
else {
statements = appendExportsOfVariableStatement(statements, node, false);
}
return ts.singleOrMany(statements);
}
function hoistBindingElement(node) {
if (ts.isBindingPattern(node.name)) {
for (var _i = 0, _a = node.name.elements; _i < _a.length; _i++) {
var element = _a[_i];
if (!ts.isOmittedExpression(element)) {
hoistBindingElement(element);
}
}
}
else {
hoistVariableDeclaration(ts.getSynthesizedClone(node.name));
}
}
function shouldHoistVariableDeclarationList(node) {
return (ts.getEmitFlags(node) & 2097152) === 0
&& (enclosingBlockScopedContainer.kind === 265
|| (ts.getOriginalNode(node).flags & 3) === 0);
}
function transformInitializedVariable(node, isExportedDeclaration) {
var createAssignment = isExportedDeclaration ? createExportedVariableAssignment : createNonExportedVariableAssignment;
return ts.isBindingPattern(node.name)
? ts.flattenDestructuringAssignment(node, destructuringAndImportCallVisitor, context, 0, false, createAssignment)
: node.initializer ? createAssignment(node.name, ts.visitNode(node.initializer, destructuringAndImportCallVisitor, ts.isExpression)) : node.name;
}
function createExportedVariableAssignment(name, value, location) {
return createVariableAssignment(name, value, location, true);
}
function createNonExportedVariableAssignment(name, value, location) {
return createVariableAssignment(name, value, location, false);
}
function createVariableAssignment(name, value, location, isExportedDeclaration) {
hoistVariableDeclaration(ts.getSynthesizedClone(name));
return isExportedDeclaration
? createExportExpression(name, preventSubstitution(ts.setTextRange(ts.createAssignment(name, value), location)))
: preventSubstitution(ts.setTextRange(ts.createAssignment(name, value), location));
}
function visitMergeDeclarationMarker(node) {
if (hasAssociatedEndOfDeclarationMarker(node) && node.original.kind === 208) {
var id = ts.getOriginalNodeId(node);
var isExportedDeclaration = ts.hasModifier(node.original, 1);
deferredExports[id] = appendExportsOfVariableStatement(deferredExports[id], node.original, isExportedDeclaration);
}
return node;
}
function hasAssociatedEndOfDeclarationMarker(node) {
return (ts.getEmitFlags(node) & 4194304) !== 0;
}
function visitEndOfDeclarationMarker(node) {
var id = ts.getOriginalNodeId(node);
var statements = deferredExports[id];
if (statements) {
delete deferredExports[id];
return ts.append(statements, node);
}
return node;
}
function appendExportsOfImportDeclaration(statements, decl) {
if (moduleInfo.exportEquals) {
return statements;
}
var importClause = decl.importClause;
if (!importClause) {
return statements;
}
if (importClause.name) {
statements = appendExportsOfDeclaration(statements, importClause);
}
var namedBindings = importClause.namedBindings;
if (namedBindings) {
switch (namedBindings.kind) {
case 240:
statements = appendExportsOfDeclaration(statements, namedBindings);
break;
case 241:
for (var _i = 0, _a = namedBindings.elements; _i < _a.length; _i++) {
var importBinding = _a[_i];
statements = appendExportsOfDeclaration(statements, importBinding);
}
break;
}
}
return statements;
}
function appendExportsOfImportEqualsDeclaration(statements, decl) {
if (moduleInfo.exportEquals) {
return statements;
}
return appendExportsOfDeclaration(statements, decl);
}
function appendExportsOfVariableStatement(statements, node, exportSelf) {
if (moduleInfo.exportEquals) {
return statements;
}
for (var _i = 0, _a = node.declarationList.declarations; _i < _a.length; _i++) {
var decl = _a[_i];
if (decl.initializer || exportSelf) {
statements = appendExportsOfBindingElement(statements, decl, exportSelf);
}
}
return statements;
}
function appendExportsOfBindingElement(statements, decl, exportSelf) {
if (moduleInfo.exportEquals) {
return statements;
}
if (ts.isBindingPattern(decl.name)) {
for (var _i = 0, _a = decl.name.elements; _i < _a.length; _i++) {
var element = _a[_i];
if (!ts.isOmittedExpression(element)) {
statements = appendExportsOfBindingElement(statements, element, exportSelf);
}
}
}
else if (!ts.isGeneratedIdentifier(decl.name)) {
var excludeName = void 0;
if (exportSelf) {
statements = appendExportStatement(statements, decl.name, ts.getLocalName(decl));
excludeName = ts.idText(decl.name);
}
statements = appendExportsOfDeclaration(statements, decl, excludeName);
}
return statements;
}
function appendExportsOfHoistedDeclaration(statements, decl) {
if (moduleInfo.exportEquals) {
return statements;
}
var excludeName;
if (ts.hasModifier(decl, 1)) {
var exportName = ts.hasModifier(decl, 512) ? ts.createLiteral("default") : decl.name;
statements = appendExportStatement(statements, exportName, ts.getLocalName(decl));
excludeName = ts.getTextOfIdentifierOrLiteral(exportName);
}
if (decl.name) {
statements = appendExportsOfDeclaration(statements, decl, excludeName);
}
return statements;
}
function appendExportsOfDeclaration(statements, decl, excludeName) {
if (moduleInfo.exportEquals) {
return statements;
}
var name = ts.getDeclarationName(decl);
var exportSpecifiers = moduleInfo.exportSpecifiers.get(ts.idText(name));
if (exportSpecifiers) {
for (var _i = 0, exportSpecifiers_2 = exportSpecifiers; _i < exportSpecifiers_2.length; _i++) {
var exportSpecifier = exportSpecifiers_2[_i];
if (exportSpecifier.name.escapedText !== excludeName) {
statements = appendExportStatement(statements, exportSpecifier.name, name);
}
}
}
return statements;
}
function appendExportStatement(statements, exportName, expression, allowComments) {
statements = ts.append(statements, createExportStatement(exportName, expression, allowComments));
return statements;
}
function createExportStatement(name, value, allowComments) {
var statement = ts.createStatement(createExportExpression(name, value));
ts.startOnNewLine(statement);
if (!allowComments) {
ts.setEmitFlags(statement, 1536);
}
return statement;
}
function createExportExpression(name, value) {
var exportName = ts.isIdentifier(name) ? ts.createLiteral(name) : name;
ts.setEmitFlags(value, ts.getEmitFlags(value) | 1536);
return ts.setCommentRange(ts.createCall(exportFunction, undefined, [exportName, value]), value);
}
function nestedElementVisitor(node) {
switch (node.kind) {
case 208:
return visitVariableStatement(node);
case 228:
return visitFunctionDeclaration(node);
case 229:
return visitClassDeclaration(node);
case 214:
return visitForStatement(node);
case 215:
return visitForInStatement(node);
case 216:
return visitForOfStatement(node);
case 212:
return visitDoStatement(node);
case 213:
return visitWhileStatement(node);
case 222:
return visitLabeledStatement(node);
case 220:
return visitWithStatement(node);
case 221:
return visitSwitchStatement(node);
case 235:
return visitCaseBlock(node);
case 257:
return visitCaseClause(node);
case 258:
return visitDefaultClause(node);
case 224:
return visitTryStatement(node);
case 260:
return visitCatchClause(node);
case 207:
return visitBlock(node);
case 290:
return visitMergeDeclarationMarker(node);
case 291:
return visitEndOfDeclarationMarker(node);
default:
return destructuringAndImportCallVisitor(node);
}
}
function visitForStatement(node) {
var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
enclosingBlockScopedContainer = node;
node = ts.updateFor(node, visitForInitializer(node.initializer), ts.visitNode(node.condition, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.incrementor, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.statement, nestedElementVisitor, ts.isStatement));
enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
return node;
}
function visitForInStatement(node) {
var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
enclosingBlockScopedContainer = node;
node = ts.updateForIn(node, visitForInitializer(node.initializer), ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.statement, nestedElementVisitor, ts.isStatement, ts.liftToBlock));
enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
return node;
}
function visitForOfStatement(node) {
var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
enclosingBlockScopedContainer = node;
node = ts.updateForOf(node, node.awaitModifier, visitForInitializer(node.initializer), ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.statement, nestedElementVisitor, ts.isStatement, ts.liftToBlock));
enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
return node;
}
function shouldHoistForInitializer(node) {
return ts.isVariableDeclarationList(node)
&& shouldHoistVariableDeclarationList(node);
}
function visitForInitializer(node) {
if (!node) {
return node;
}
if (shouldHoistForInitializer(node)) {
var expressions = void 0;
for (var _i = 0, _a = node.declarations; _i < _a.length; _i++) {
var variable = _a[_i];
expressions = ts.append(expressions, transformInitializedVariable(variable, false));
if (!variable.initializer) {
hoistBindingElement(variable);
}
}
return expressions ? ts.inlineExpressions(expressions) : ts.createOmittedExpression();
}
else {
return ts.visitEachChild(node, nestedElementVisitor, context);
}
}
function visitDoStatement(node) {
return ts.updateDo(node, ts.visitNode(node.statement, nestedElementVisitor, ts.isStatement, ts.liftToBlock), ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression));
}
function visitWhileStatement(node) {
return ts.updateWhile(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.statement, nestedElementVisitor, ts.isStatement, ts.liftToBlock));
}
function visitLabeledStatement(node) {
return ts.updateLabel(node, node.label, ts.visitNode(node.statement, nestedElementVisitor, ts.isStatement, ts.liftToBlock));
}
function visitWithStatement(node) {
return ts.updateWith(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.statement, nestedElementVisitor, ts.isStatement, ts.liftToBlock));
}
function visitSwitchStatement(node) {
return ts.updateSwitch(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNode(node.caseBlock, nestedElementVisitor, ts.isCaseBlock));
}
function visitCaseBlock(node) {
var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
enclosingBlockScopedContainer = node;
node = ts.updateCaseBlock(node, ts.visitNodes(node.clauses, nestedElementVisitor, ts.isCaseOrDefaultClause));
enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
return node;
}
function visitCaseClause(node) {
return ts.updateCaseClause(node, ts.visitNode(node.expression, destructuringAndImportCallVisitor, ts.isExpression), ts.visitNodes(node.statements, nestedElementVisitor, ts.isStatement));
}
function visitDefaultClause(node) {
return ts.visitEachChild(node, nestedElementVisitor, context);
}
function visitTryStatement(node) {
return ts.visitEachChild(node, nestedElementVisitor, context);
}
function visitCatchClause(node) {
var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
enclosingBlockScopedContainer = node;
node = ts.updateCatchClause(node, node.variableDeclaration, ts.visitNode(node.block, nestedElementVisitor, ts.isBlock));
enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
return node;
}
function visitBlock(node) {
var savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer;
enclosingBlockScopedContainer = node;
node = ts.visitEachChild(node, nestedElementVisitor, context);
enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer;
return node;
}
function destructuringAndImportCallVisitor(node) {
if (node.transformFlags & 1024
&& node.kind === 194) {
return visitDestructuringAssignment(node);
}
else if (ts.isImportCall(node)) {
return visitImportCallExpression(node);
}
else if ((node.transformFlags & 2048) || (node.transformFlags & 67108864)) {
return ts.visitEachChild(node, destructuringAndImportCallVisitor, context);
}
else {
return node;
}
}
function visitImportCallExpression(node) {
return ts.createCall(ts.createPropertyAccess(contextObject, ts.createIdentifier("import")), undefined, ts.some(node.arguments) ? [ts.visitNode(node.arguments[0], destructuringAndImportCallVisitor)] : []);
}
function visitDestructuringAssignment(node) {
if (hasExportedReferenceInDestructuringTarget(node.left)) {
return ts.flattenDestructuringAssignment(node, destructuringAndImportCallVisitor, context, 0, true);
}
return ts.visitEachChild(node, destructuringAndImportCallVisitor, context);
}
function hasExportedReferenceInDestructuringTarget(node) {
if (ts.isAssignmentExpression(node, true)) {
return hasExportedReferenceInDestructuringTarget(node.left);
}
else if (ts.isSpreadElement(node)) {
return hasExportedReferenceInDestructuringTarget(node.expression);
}
else if (ts.isObjectLiteralExpression(node)) {
return ts.some(node.properties, hasExportedReferenceInDestructuringTarget);
}
else if (ts.isArrayLiteralExpression(node)) {
return ts.some(node.elements, hasExportedReferenceInDestructuringTarget);
}
else if (ts.isShorthandPropertyAssignment(node)) {
return hasExportedReferenceInDestructuringTarget(node.name);
}
else if (ts.isPropertyAssignment(node)) {
return hasExportedReferenceInDestructuringTarget(node.initializer);
}
else if (ts.isIdentifier(node)) {
var container = resolver.getReferencedExportContainer(node);
return container !== undefined && container.kind === 265;
}
else {
return false;
}
}
function modifierVisitor(node) {
switch (node.kind) {
case 84:
case 79:
return undefined;
}
return node;
}
function onEmitNode(hint, node, emitCallback) {
if (node.kind === 265) {
var id = ts.getOriginalNodeId(node);
currentSourceFile = node;
moduleInfo = moduleInfoMap[id];
exportFunction = exportFunctionsMap[id];
noSubstitution = noSubstitutionMap[id];
if (noSubstitution) {
delete noSubstitutionMap[id];
}
previousOnEmitNode(hint, node, emitCallback);
currentSourceFile = undefined;
moduleInfo = undefined;
exportFunction = undefined;
noSubstitution = undefined;
}
else {
previousOnEmitNode(hint, node, emitCallback);
}
}
function onSubstituteNode(hint, node) {
node = previousOnSubstituteNode(hint, node);
if (isSubstitutionPrevented(node)) {
return node;
}
if (hint === 1) {
return substituteExpression(node);
}
return node;
}
function substituteExpression(node) {
switch (node.kind) {
case 71:
return substituteExpressionIdentifier(node);
case 194:
return substituteBinaryExpression(node);
case 192:
case 193:
return substituteUnaryExpression(node);
}
return node;
}
function substituteExpressionIdentifier(node) {
if (ts.getEmitFlags(node) & 4096) {
var externalHelpersModuleName = ts.getExternalHelpersModuleName(currentSourceFile);
if (externalHelpersModuleName) {
return ts.createPropertyAccess(externalHelpersModuleName, node);
}
return node;
}
if (!ts.isGeneratedIdentifier(node) && !ts.isLocalName(node)) {
var importDeclaration = resolver.getReferencedImportDeclaration(node);
if (importDeclaration) {
if (ts.isImportClause(importDeclaration)) {
return ts.setTextRange(ts.createPropertyAccess(ts.getGeneratedNameForNode(importDeclaration.parent), ts.createIdentifier("default")), node);
}
else if (ts.isImportSpecifier(importDeclaration)) {
return ts.setTextRange(ts.createPropertyAccess(ts.getGeneratedNameForNode(importDeclaration.parent.parent.parent), ts.getSynthesizedClone(importDeclaration.propertyName || importDeclaration.name)), node);
}
}
}
return node;
}
function substituteBinaryExpression(node) {
if (ts.isAssignmentOperator(node.operatorToken.kind)
&& ts.isIdentifier(node.left)
&& !ts.isGeneratedIdentifier(node.left)
&& !ts.isLocalName(node.left)
&& !ts.isDeclarationNameOfEnumOrNamespace(node.left)) {
var exportedNames = getExports(node.left);
if (exportedNames) {
var expression = node;
for (var _i = 0, exportedNames_3 = exportedNames; _i < exportedNames_3.length; _i++) {
var exportName = exportedNames_3[_i];
expression = createExportExpression(exportName, preventSubstitution(expression));
}
return expression;
}
}
return node;
}
function substituteUnaryExpression(node) {
if ((node.operator === 43 || node.operator === 44)
&& ts.isIdentifier(node.operand)
&& !ts.isGeneratedIdentifier(node.operand)
&& !ts.isLocalName(node.operand)
&& !ts.isDeclarationNameOfEnumOrNamespace(node.operand)) {
var exportedNames = getExports(node.operand);
if (exportedNames) {
var expression = node.kind === 193
? ts.setTextRange(ts.createPrefix(node.operator, node.operand), node)
: node;
for (var _i = 0, exportedNames_4 = exportedNames; _i < exportedNames_4.length; _i++) {
var exportName = exportedNames_4[_i];
expression = createExportExpression(exportName, preventSubstitution(expression));
}
if (node.kind === 193) {
expression = node.operator === 43
? ts.createSubtract(preventSubstitution(expression), ts.createLiteral(1))
: ts.createAdd(preventSubstitution(expression), ts.createLiteral(1));
}
return expression;
}
}
return node;
}
function getExports(name) {
var exportedNames;
if (!ts.isGeneratedIdentifier(name)) {
var valueDeclaration = resolver.getReferencedImportDeclaration(name)
|| resolver.getReferencedValueDeclaration(name);
if (valueDeclaration) {
var exportContainer = resolver.getReferencedExportContainer(name, false);
if (exportContainer && exportContainer.kind === 265) {
exportedNames = ts.append(exportedNames, ts.getDeclarationName(valueDeclaration));
}
exportedNames = ts.addRange(exportedNames, moduleInfo && moduleInfo.exportedBindings[ts.getOriginalNodeId(valueDeclaration)]);
}
}
return exportedNames;
}
function preventSubstitution(node) {
if (noSubstitution === undefined)
noSubstitution = [];
noSubstitution[ts.getNodeId(node)] = true;
return node;
}
function isSubstitutionPrevented(node) {
return noSubstitution && node.id && noSubstitution[node.id];
}
}
ts.transformSystemModule = transformSystemModule;
})(ts || (ts = {}));
var ts;
(function (ts) {
function transformES2015Module(context) {
var compilerOptions = context.getCompilerOptions();
var previousOnEmitNode = context.onEmitNode;
var previousOnSubstituteNode = context.onSubstituteNode;
context.onEmitNode = onEmitNode;
context.onSubstituteNode = onSubstituteNode;
context.enableEmitNotification(265);
context.enableSubstitution(71);
var currentSourceFile;
return transformSourceFile;
function transformSourceFile(node) {
if (node.isDeclarationFile) {
return node;
}
if (ts.isExternalModule(node) || compilerOptions.isolatedModules) {
var externalHelpersModuleName = ts.getOrCreateExternalHelpersModuleNameIfNeeded(node, compilerOptions);
if (externalHelpersModuleName) {
var statements = [];
var statementOffset = ts.addPrologue(statements, node.statements);
ts.append(statements, ts.createImportDeclaration(undefined, undefined, ts.createImportClause(undefined, ts.createNamespaceImport(externalHelpersModuleName)), ts.createLiteral(ts.externalHelpersModuleNameText)));
ts.addRange(statements, ts.visitNodes(node.statements, visitor, ts.isStatement, statementOffset));
return ts.updateSourceFileNode(node, ts.setTextRange(ts.createNodeArray(statements), node.statements));
}
else {
return ts.visitEachChild(node, visitor, context);
}
}
return node;
}
function visitor(node) {
switch (node.kind) {
case 237:
return undefined;
case 243:
return visitExportAssignment(node);
}
return node;
}
function visitExportAssignment(node) {
return node.isExportEquals ? undefined : node;
}
function onEmitNode(hint, node, emitCallback) {
if (ts.isSourceFile(node)) {
currentSourceFile = node;
previousOnEmitNode(hint, node, emitCallback);
currentSourceFile = undefined;
}
else {
previousOnEmitNode(hint, node, emitCallback);
}
}
function onSubstituteNode(hint, node) {
node = previousOnSubstituteNode(hint, node);
if (ts.isIdentifier(node) && hint === 1) {
return substituteExpressionIdentifier(node);
}
return node;
}
function substituteExpressionIdentifier(node) {
if (ts.getEmitFlags(node) & 4096) {
var externalHelpersModuleName = ts.getExternalHelpersModuleName(currentSourceFile);
if (externalHelpersModuleName) {
return ts.createPropertyAccess(externalHelpersModuleName, node);
}
}
return node;
}
}
ts.transformES2015Module = transformES2015Module;
})(ts || (ts = {}));
var ts;
(function (ts) {
function getModuleTransformer(moduleKind) {
switch (moduleKind) {
case ts.ModuleKind.ESNext:
case ts.ModuleKind.ES2015:
return ts.transformES2015Module;
case ts.ModuleKind.System:
return ts.transformSystemModule;
default:
return ts.transformModule;
}
}
function getTransformers(compilerOptions, customTransformers) {
var jsx = compilerOptions.jsx;
var languageVersion = ts.getEmitScriptTarget(compilerOptions);
var moduleKind = ts.getEmitModuleKind(compilerOptions);
var transformers = [];
ts.addRange(transformers, customTransformers && customTransformers.before);
transformers.push(ts.transformTypeScript);
if (jsx === 2) {
transformers.push(ts.transformJsx);
}
if (languageVersion < 5) {
transformers.push(ts.transformESNext);
}
if (languageVersion < 4) {
transformers.push(ts.transformES2017);
}
if (languageVersion < 3) {
transformers.push(ts.transformES2016);
}
if (languageVersion < 2) {
transformers.push(ts.transformES2015);
transformers.push(ts.transformGenerators);
}
transformers.push(getModuleTransformer(moduleKind));
if (languageVersion < 1) {
transformers.push(ts.transformES5);
}
ts.addRange(transformers, customTransformers && customTransformers.after);
return transformers;
}
ts.getTransformers = getTransformers;
function transformNodes(resolver, host, options, nodes, transformers, allowDtsFiles) {
var enabledSyntaxKindFeatures = new Array(292);
var lexicalEnvironmentVariableDeclarations;
var lexicalEnvironmentFunctionDeclarations;
var lexicalEnvironmentVariableDeclarationsStack = [];
var lexicalEnvironmentFunctionDeclarationsStack = [];
var lexicalEnvironmentStackOffset = 0;
var lexicalEnvironmentSuspended = false;
var emitHelpers;
var onSubstituteNode = function (_, node) { return node; };
var onEmitNode = function (hint, node, callback) { return callback(hint, node); };
var state = 0;
var context = {
getCompilerOptions: function () { return options; },
getEmitResolver: function () { return resolver; },
getEmitHost: function () { return host; },
startLexicalEnvironment: startLexicalEnvironment,
suspendLexicalEnvironment: suspendLexicalEnvironment,
resumeLexicalEnvironment: resumeLexicalEnvironment,
endLexicalEnvironment: endLexicalEnvironment,
hoistVariableDeclaration: hoistVariableDeclaration,
hoistFunctionDeclaration: hoistFunctionDeclaration,
requestEmitHelper: requestEmitHelper,
readEmitHelpers: readEmitHelpers,
enableSubstitution: enableSubstitution,
enableEmitNotification: enableEmitNotification,
isSubstitutionEnabled: isSubstitutionEnabled,
isEmitNotificationEnabled: isEmitNotificationEnabled,
get onSubstituteNode() { return onSubstituteNode; },
set onSubstituteNode(value) {
ts.Debug.assert(state < 1, "Cannot modify transformation hooks after initialization has completed.");
ts.Debug.assert(value !== undefined, "Value must not be 'undefined'");
onSubstituteNode = value;
},
get onEmitNode() { return onEmitNode; },
set onEmitNode(value) {
ts.Debug.assert(state < 1, "Cannot modify transformation hooks after initialization has completed.");
ts.Debug.assert(value !== undefined, "Value must not be 'undefined'");
onEmitNode = value;
}
};
for (var _i = 0, nodes_4 = nodes; _i < nodes_4.length; _i++) {
var node = nodes_4[_i];
ts.disposeEmitNodes(ts.getSourceFileOfNode(ts.getParseTreeNode(node)));
}
ts.performance.mark("beforeTransform");
var transformation = ts.chain.apply(void 0, transformers)(context);
state = 1;
var transformed = ts.map(nodes, allowDtsFiles ? transformation : transformRoot);
state = 2;
ts.performance.mark("afterTransform");
ts.performance.measure("transformTime", "beforeTransform", "afterTransform");
return {
transformed: transformed,
substituteNode: substituteNode,
emitNodeWithNotification: emitNodeWithNotification,
dispose: dispose
};
function transformRoot(node) {
return node && (!ts.isSourceFile(node) || !node.isDeclarationFile) ? transformation(node) : node;
}
function enableSubstitution(kind) {
ts.Debug.assert(state < 2, "Cannot modify the transformation context after transformation has completed.");
enabledSyntaxKindFeatures[kind] |= 1;
}
function isSubstitutionEnabled(node) {
return (enabledSyntaxKindFeatures[node.kind] & 1) !== 0
&& (ts.getEmitFlags(node) & 4) === 0;
}
function substituteNode(hint, node) {
ts.Debug.assert(state < 3, "Cannot substitute a node after the result is disposed.");
return node && isSubstitutionEnabled(node) && onSubstituteNode(hint, node) || node;
}
function enableEmitNotification(kind) {
ts.Debug.assert(state < 2, "Cannot modify the transformation context after transformation has completed.");
enabledSyntaxKindFeatures[kind] |= 2;
}
function isEmitNotificationEnabled(node) {
return (enabledSyntaxKindFeatures[node.kind] & 2) !== 0
|| (ts.getEmitFlags(node) & 2) !== 0;
}
function emitNodeWithNotification(hint, node, emitCallback) {
ts.Debug.assert(state < 3, "Cannot invoke TransformationResult callbacks after the result is disposed.");
if (node) {
if (isEmitNotificationEnabled(node)) {
onEmitNode(hint, node, emitCallback);
}
else {
emitCallback(hint, node);
}
}
}
function hoistVariableDeclaration(name) {
ts.Debug.assert(state > 0, "Cannot modify the lexical environment during initialization.");
ts.Debug.assert(state < 2, "Cannot modify the lexical environment after transformation has completed.");
var decl = ts.setEmitFlags(ts.createVariableDeclaration(name), 64);
if (!lexicalEnvironmentVariableDeclarations) {
lexicalEnvironmentVariableDeclarations = [decl];
}
else {
lexicalEnvironmentVariableDeclarations.push(decl);
}
}
function hoistFunctionDeclaration(func) {
ts.Debug.assert(state > 0, "Cannot modify the lexical environment during initialization.");
ts.Debug.assert(state < 2, "Cannot modify the lexical environment after transformation has completed.");
if (!lexicalEnvironmentFunctionDeclarations) {
lexicalEnvironmentFunctionDeclarations = [func];
}
else {
lexicalEnvironmentFunctionDeclarations.push(func);
}
}
function startLexicalEnvironment() {
ts.Debug.assert(state > 0, "Cannot modify the lexical environment during initialization.");
ts.Debug.assert(state < 2, "Cannot modify the lexical environment after transformation has completed.");
ts.Debug.assert(!lexicalEnvironmentSuspended, "Lexical environment is suspended.");
lexicalEnvironmentVariableDeclarationsStack[lexicalEnvironmentStackOffset] = lexicalEnvironmentVariableDeclarations;
lexicalEnvironmentFunctionDeclarationsStack[lexicalEnvironmentStackOffset] = lexicalEnvironmentFunctionDeclarations;
lexicalEnvironmentStackOffset++;
lexicalEnvironmentVariableDeclarations = undefined;
lexicalEnvironmentFunctionDeclarations = undefined;
}
function suspendLexicalEnvironment() {
ts.Debug.assert(state > 0, "Cannot modify the lexical environment during initialization.");
ts.Debug.assert(state < 2, "Cannot modify the lexical environment after transformation has completed.");
ts.Debug.assert(!lexicalEnvironmentSuspended, "Lexical environment is already suspended.");
lexicalEnvironmentSuspended = true;
}
function resumeLexicalEnvironment() {
ts.Debug.assert(state > 0, "Cannot modify the lexical environment during initialization.");
ts.Debug.assert(state < 2, "Cannot modify the lexical environment after transformation has completed.");
ts.Debug.assert(lexicalEnvironmentSuspended, "Lexical environment is not suspended.");
lexicalEnvironmentSuspended = false;
}
function endLexicalEnvironment() {
ts.Debug.assert(state > 0, "Cannot modify the lexical environment during initialization.");
ts.Debug.assert(state < 2, "Cannot modify the lexical environment after transformation has completed.");
ts.Debug.assert(!lexicalEnvironmentSuspended, "Lexical environment is suspended.");
var statements;
if (lexicalEnvironmentVariableDeclarations || lexicalEnvironmentFunctionDeclarations) {
if (lexicalEnvironmentFunctionDeclarations) {
statements = lexicalEnvironmentFunctionDeclarations.slice();
}
if (lexicalEnvironmentVariableDeclarations) {
var statement = ts.createVariableStatement(undefined, ts.createVariableDeclarationList(lexicalEnvironmentVariableDeclarations));
if (!statements) {
statements = [statement];
}
else {
statements.push(statement);
}
}
}
lexicalEnvironmentStackOffset--;
lexicalEnvironmentVariableDeclarations = lexicalEnvironmentVariableDeclarationsStack[lexicalEnvironmentStackOffset];
lexicalEnvironmentFunctionDeclarations = lexicalEnvironmentFunctionDeclarationsStack[lexicalEnvironmentStackOffset];
if (lexicalEnvironmentStackOffset === 0) {
lexicalEnvironmentVariableDeclarationsStack = [];
lexicalEnvironmentFunctionDeclarationsStack = [];
}
return statements;
}
function requestEmitHelper(helper) {
ts.Debug.assert(state > 0, "Cannot modify the transformation context during initialization.");
ts.Debug.assert(state < 2, "Cannot modify the transformation context after transformation has completed.");
ts.Debug.assert(!helper.scoped, "Cannot request a scoped emit helper.");
emitHelpers = ts.append(emitHelpers, helper);
}
function readEmitHelpers() {
ts.Debug.assert(state > 0, "Cannot modify the transformation context during initialization.");
ts.Debug.assert(state < 2, "Cannot modify the transformation context after transformation has completed.");
var helpers = emitHelpers;
emitHelpers = undefined;
return helpers;
}
function dispose() {
if (state < 3) {
for (var _i = 0, nodes_5 = nodes; _i < nodes_5.length; _i++) {
var node = nodes_5[_i];
ts.disposeEmitNodes(ts.getSourceFileOfNode(ts.getParseTreeNode(node)));
}
lexicalEnvironmentVariableDeclarations = undefined;
lexicalEnvironmentVariableDeclarationsStack = undefined;
lexicalEnvironmentFunctionDeclarations = undefined;
lexicalEnvironmentFunctionDeclarationsStack = undefined;
onSubstituteNode = undefined;
onEmitNode = undefined;
emitHelpers = undefined;
state = 3;
}
}
}
ts.transformNodes = transformNodes;
})(ts || (ts = {}));
var ts;
(function (ts) {
var defaultLastEncodedSourceMapSpan = {
emittedLine: 1,
emittedColumn: 1,
sourceLine: 1,
sourceColumn: 1,
sourceIndex: 0
};
function createSourceMapWriter(host, writer) {
var compilerOptions = host.getCompilerOptions();
var extendedDiagnostics = compilerOptions.extendedDiagnostics;
var currentSource;
var currentSourceText;
var sourceMapDir;
var sourceMapSourceIndex;
var lastRecordedSourceMapSpan;
var lastEncodedSourceMapSpan;
var lastEncodedNameIndex;
var sourceMapData;
var disabled = !(compilerOptions.sourceMap || compilerOptions.inlineSourceMap);
return {
initialize: initialize,
reset: reset,
getSourceMapData: function () { return sourceMapData; },
setSourceFile: setSourceFile,
emitPos: emitPos,
emitNodeWithSourceMap: emitNodeWithSourceMap,
emitTokenWithSourceMap: emitTokenWithSourceMap,
getText: getText,
getSourceMappingURL: getSourceMappingURL,
};
function skipSourceTrivia(pos) {
return currentSource.skipTrivia ? currentSource.skipTrivia(pos) : ts.skipTrivia(currentSourceText, pos);
}
function initialize(filePath, sourceMapFilePath, sourceFileOrBundle) {
if (disabled) {
return;
}
if (sourceMapData) {
reset();
}
currentSource = undefined;
currentSourceText = undefined;
sourceMapSourceIndex = -1;
lastRecordedSourceMapSpan = undefined;
lastEncodedSourceMapSpan = defaultLastEncodedSourceMapSpan;
lastEncodedNameIndex = 0;
sourceMapData = {
sourceMapFilePath: sourceMapFilePath,
jsSourceMappingURL: !compilerOptions.inlineSourceMap ? ts.getBaseFileName(ts.normalizeSlashes(sourceMapFilePath)) : undefined,
sourceMapFile: ts.getBaseFileName(ts.normalizeSlashes(filePath)),
sourceMapSourceRoot: compilerOptions.sourceRoot || "",
sourceMapSources: [],
inputSourceFileNames: [],
sourceMapNames: [],
sourceMapMappings: "",
sourceMapSourcesContent: compilerOptions.inlineSources ? [] : undefined,
sourceMapDecodedMappings: []
};
sourceMapData.sourceMapSourceRoot = ts.normalizeSlashes(sourceMapData.sourceMapSourceRoot);
if (sourceMapData.sourceMapSourceRoot.length && sourceMapData.sourceMapSourceRoot.charCodeAt(sourceMapData.sourceMapSourceRoot.length - 1) !== 47) {
sourceMapData.sourceMapSourceRoot += ts.directorySeparator;
}
if (compilerOptions.mapRoot) {
sourceMapDir = ts.normalizeSlashes(compilerOptions.mapRoot);
if (sourceFileOrBundle.kind === 265) {
sourceMapDir = ts.getDirectoryPath(ts.getSourceFilePathInNewDir(sourceFileOrBundle, host, sourceMapDir));
}
if (!ts.isRootedDiskPath(sourceMapDir) && !ts.isUrl(sourceMapDir)) {
sourceMapDir = ts.combinePaths(host.getCommonSourceDirectory(), sourceMapDir);
sourceMapData.jsSourceMappingURL = ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizePath(filePath)), ts.combinePaths(sourceMapDir, sourceMapData.jsSourceMappingURL), host.getCurrentDirectory(), host.getCanonicalFileName, true);
}
else {
sourceMapData.jsSourceMappingURL = ts.combinePaths(sourceMapDir, sourceMapData.jsSourceMappingURL);
}
}
else {
sourceMapDir = ts.getDirectoryPath(ts.normalizePath(filePath));
}
}
function reset() {
if (disabled) {
return;
}
currentSource = undefined;
sourceMapDir = undefined;
sourceMapSourceIndex = undefined;
lastRecordedSourceMapSpan = undefined;
lastEncodedSourceMapSpan = undefined;
lastEncodedNameIndex = undefined;
sourceMapData = undefined;
}
function encodeLastRecordedSourceMapSpan() {
if (!lastRecordedSourceMapSpan || lastRecordedSourceMapSpan === lastEncodedSourceMapSpan) {
return;
}
var prevEncodedEmittedColumn = lastEncodedSourceMapSpan.emittedColumn;
if (lastEncodedSourceMapSpan.emittedLine === lastRecordedSourceMapSpan.emittedLine) {
if (sourceMapData.sourceMapMappings) {
sourceMapData.sourceMapMappings += ",";
}
}
else {
for (var encodedLine = lastEncodedSourceMapSpan.emittedLine; encodedLine < lastRecordedSourceMapSpan.emittedLine; encodedLine++) {
sourceMapData.sourceMapMappings += ";";
}
prevEncodedEmittedColumn = 1;
}
sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.emittedColumn - prevEncodedEmittedColumn);
sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.sourceIndex - lastEncodedSourceMapSpan.sourceIndex);
sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.sourceLine - lastEncodedSourceMapSpan.sourceLine);
sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.sourceColumn - lastEncodedSourceMapSpan.sourceColumn);
if (lastRecordedSourceMapSpan.nameIndex >= 0) {
ts.Debug.assert(false, "We do not support name index right now, Make sure to update updateLastEncodedAndRecordedSpans when we start using this");
sourceMapData.sourceMapMappings += base64VLQFormatEncode(lastRecordedSourceMapSpan.nameIndex - lastEncodedNameIndex);
lastEncodedNameIndex = lastRecordedSourceMapSpan.nameIndex;
}
lastEncodedSourceMapSpan = lastRecordedSourceMapSpan;
sourceMapData.sourceMapDecodedMappings.push(lastEncodedSourceMapSpan);
}
function emitPos(pos) {
if (disabled || ts.positionIsSynthesized(pos)) {
return;
}
if (extendedDiagnostics) {
ts.performance.mark("beforeSourcemap");
}
var sourceLinePos = ts.getLineAndCharacterOfPosition(currentSource, pos);
sourceLinePos.line++;
sourceLinePos.character++;
var emittedLine = writer.getLine();
var emittedColumn = writer.getColumn();
if (!lastRecordedSourceMapSpan ||
lastRecordedSourceMapSpan.emittedLine !== emittedLine ||
lastRecordedSourceMapSpan.emittedColumn !== emittedColumn ||
(lastRecordedSourceMapSpan.sourceIndex === sourceMapSourceIndex &&
(lastRecordedSourceMapSpan.sourceLine > sourceLinePos.line ||
(lastRecordedSourceMapSpan.sourceLine === sourceLinePos.line && lastRecordedSourceMapSpan.sourceColumn > sourceLinePos.character)))) {
encodeLastRecordedSourceMapSpan();
lastRecordedSourceMapSpan = {
emittedLine: emittedLine,
emittedColumn: emittedColumn,
sourceLine: sourceLinePos.line,
sourceColumn: sourceLinePos.character,
sourceIndex: sourceMapSourceIndex
};
}
else {
lastRecordedSourceMapSpan.sourceLine = sourceLinePos.line;
lastRecordedSourceMapSpan.sourceColumn = sourceLinePos.character;
lastRecordedSourceMapSpan.sourceIndex = sourceMapSourceIndex;
}
if (extendedDiagnostics) {
ts.performance.mark("afterSourcemap");
ts.performance.measure("Source Map", "beforeSourcemap", "afterSourcemap");
}
}
function emitNodeWithSourceMap(hint, node, emitCallback) {
if (disabled) {
return emitCallback(hint, node);
}
if (node) {
var emitNode = node.emitNode;
var emitFlags = emitNode && emitNode.flags;
var range = emitNode && emitNode.sourceMapRange;
var _a = range || node, pos = _a.pos, end = _a.end;
var source = range && range.source;
var oldSource = currentSource;
if (source === oldSource)
source = undefined;
if (source)
setSourceFile(source);
if (node.kind !== 287
&& (emitFlags & 16) === 0
&& pos >= 0) {
emitPos(skipSourceTrivia(pos));
}
if (source)
setSourceFile(oldSource);
if (emitFlags & 64) {
disabled = true;
emitCallback(hint, node);
disabled = false;
}
else {
emitCallback(hint, node);
}
if (source)
setSourceFile(source);
if (node.kind !== 287
&& (emitFlags & 32) === 0
&& end >= 0) {
emitPos(end);
}
if (source)
setSourceFile(oldSource);
}
}
function emitTokenWithSourceMap(node, token, tokenPos, emitCallback) {
if (disabled) {
return emitCallback(token, tokenPos);
}
var emitNode = node && node.emitNode;
var emitFlags = emitNode && emitNode.flags;
var range = emitNode && emitNode.tokenSourceMapRanges && emitNode.tokenSourceMapRanges[token];
tokenPos = skipSourceTrivia(range ? range.pos : tokenPos);
if ((emitFlags & 128) === 0 && tokenPos >= 0) {
emitPos(tokenPos);
}
tokenPos = emitCallback(token, tokenPos);
if (range)
tokenPos = range.end;
if ((emitFlags & 256) === 0 && tokenPos >= 0) {
emitPos(tokenPos);
}
return tokenPos;
}
function setSourceFile(sourceFile) {
if (disabled) {
return;
}
currentSource = sourceFile;
currentSourceText = currentSource.text;
var sourcesDirectoryPath = compilerOptions.sourceRoot ? host.getCommonSourceDirectory() : sourceMapDir;
var source = ts.getRelativePathToDirectoryOrUrl(sourcesDirectoryPath, currentSource.fileName, host.getCurrentDirectory(), host.getCanonicalFileName, true);
sourceMapSourceIndex = ts.indexOf(sourceMapData.sourceMapSources, source);
if (sourceMapSourceIndex === -1) {
sourceMapSourceIndex = sourceMapData.sourceMapSources.length;
sourceMapData.sourceMapSources.push(source);
sourceMapData.inputSourceFileNames.push(currentSource.fileName);
if (compilerOptions.inlineSources) {
sourceMapData.sourceMapSourcesContent.push(currentSource.text);
}
}
}
function getText() {
if (disabled) {
return;
}
encodeLastRecordedSourceMapSpan();
return JSON.stringify({
version: 3,
file: sourceMapData.sourceMapFile,
sourceRoot: sourceMapData.sourceMapSourceRoot,
sources: sourceMapData.sourceMapSources,
names: sourceMapData.sourceMapNames,
mappings: sourceMapData.sourceMapMappings,
sourcesContent: sourceMapData.sourceMapSourcesContent,
});
}
function getSourceMappingURL() {
if (disabled) {
return;
}
if (compilerOptions.inlineSourceMap) {
var base64SourceMapText = ts.convertToBase64(getText());
return sourceMapData.jsSourceMappingURL = "data:application/json;base64," + base64SourceMapText;
}
else {
return sourceMapData.jsSourceMappingURL;
}
}
}
ts.createSourceMapWriter = createSourceMapWriter;
var base64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
function base64FormatEncode(inValue) {
if (inValue < 64) {
return base64Chars.charAt(inValue);
}
throw TypeError(inValue + ": not a 64 based value");
}
function base64VLQFormatEncode(inValue) {
if (inValue < 0) {
inValue = ((-inValue) << 1) + 1;
}
else {
inValue = inValue << 1;
}
var encodedStr = "";
do {
var currentDigit = inValue & 31;
inValue = inValue >> 5;
if (inValue > 0) {
currentDigit = currentDigit | 32;
}
encodedStr = encodedStr + base64FormatEncode(currentDigit);
} while (inValue > 0);
return encodedStr;
}
})(ts || (ts = {}));
var ts;
(function (ts) {
function createCommentWriter(printerOptions, emitPos) {
var extendedDiagnostics = printerOptions.extendedDiagnostics;
var newLine = ts.getNewLineCharacter(printerOptions);
var writer;
var containerPos = -1;
var containerEnd = -1;
var declarationListContainerEnd = -1;
var currentSourceFile;
var currentText;
var currentLineMap;
var detachedCommentsInfo;
var hasWrittenComment = false;
var disabled = printerOptions.removeComments;
return {
reset: reset,
setWriter: setWriter,
setSourceFile: setSourceFile,
emitNodeWithComments: emitNodeWithComments,
emitBodyWithDetachedComments: emitBodyWithDetachedComments,
emitTrailingCommentsOfPosition: emitTrailingCommentsOfPosition,
emitLeadingCommentsOfPosition: emitLeadingCommentsOfPosition,
};
function emitNodeWithComments(hint, node, emitCallback) {
if (disabled) {
emitCallback(hint, node);
return;
}
if (node) {
hasWrittenComment = false;
var emitNode = node.emitNode;
var emitFlags = emitNode && emitNode.flags;
var _a = emitNode && emitNode.commentRange || node, pos = _a.pos, end = _a.end;
if ((pos < 0 && end < 0) || (pos === end)) {
emitNodeWithSynthesizedComments(hint, node, emitNode, emitFlags, emitCallback);
}
else {
if (extendedDiagnostics) {
ts.performance.mark("preEmitNodeWithComment");
}
var isEmittedNode = node.kind !== 287;
var skipLeadingComments = pos < 0 || (emitFlags & 512) !== 0 || node.kind === 10;
var skipTrailingComments = end < 0 || (emitFlags & 1024) !== 0 || node.kind === 10;
if (!skipLeadingComments) {
emitLeadingComments(pos, isEmittedNode);
}
var savedContainerPos = containerPos;
var savedContainerEnd = containerEnd;
var savedDeclarationListContainerEnd = declarationListContainerEnd;
if (!skipLeadingComments) {
containerPos = pos;
}
if (!skipTrailingComments) {
containerEnd = end;
if (node.kind === 227) {
declarationListContainerEnd = end;
}
}
if (extendedDiagnostics) {
ts.performance.measure("commentTime", "preEmitNodeWithComment");
}
emitNodeWithSynthesizedComments(hint, node, emitNode, emitFlags, emitCallback);
if (extendedDiagnostics) {
ts.performance.mark("postEmitNodeWithComment");
}
containerPos = savedContainerPos;
containerEnd = savedContainerEnd;
declarationListContainerEnd = savedDeclarationListContainerEnd;
if (!skipTrailingComments && isEmittedNode) {
emitTrailingComments(end);
}
if (extendedDiagnostics) {
ts.performance.measure("commentTime", "postEmitNodeWithComment");
}
}
}
}
function emitNodeWithSynthesizedComments(hint, node, emitNode, emitFlags, emitCallback) {
var leadingComments = emitNode && emitNode.leadingComments;
if (ts.some(leadingComments)) {
if (extendedDiagnostics) {
ts.performance.mark("preEmitNodeWithSynthesizedComments");
}
ts.forEach(leadingComments, emitLeadingSynthesizedComment);
if (extendedDiagnostics) {
ts.performance.measure("commentTime", "preEmitNodeWithSynthesizedComments");
}
}
emitNodeWithNestedComments(hint, node, emitFlags, emitCallback);
var trailingComments = emitNode && emitNode.trailingComments;
if (ts.some(trailingComments)) {
if (extendedDiagnostics) {
ts.performance.mark("postEmitNodeWithSynthesizedComments");
}
ts.forEach(trailingComments, emitTrailingSynthesizedComment);
if (extendedDiagnostics) {
ts.performance.measure("commentTime", "postEmitNodeWithSynthesizedComments");
}
}
}
function emitLeadingSynthesizedComment(comment) {
if (comment.kind === 2) {
writer.writeLine();
}
writeSynthesizedComment(comment);
if (comment.hasTrailingNewLine || comment.kind === 2) {
writer.writeLine();
}
else {
writer.write(" ");
}
}
function emitTrailingSynthesizedComment(comment) {
if (!writer.isAtStartOfLine()) {
writer.write(" ");
}
writeSynthesizedComment(comment);
if (comment.hasTrailingNewLine) {
writer.writeLine();
}
}
function writeSynthesizedComment(comment) {
var text = formatSynthesizedComment(comment);
var lineMap = comment.kind === 3 ? ts.computeLineStarts(text) : undefined;
ts.writeCommentRange(text, lineMap, writer, 0, text.length, newLine);
}
function formatSynthesizedComment(comment) {
return comment.kind === 3
? "/*" + comment.text + "*/"
: "//" + comment.text;
}
function emitNodeWithNestedComments(hint, node, emitFlags, emitCallback) {
if (emitFlags & 2048) {
disabled = true;
emitCallback(hint, node);
disabled = false;
}
else {
emitCallback(hint, node);
}
}
function emitBodyWithDetachedComments(node, detachedRange, emitCallback) {
if (extendedDiagnostics) {
ts.performance.mark("preEmitBodyWithDetachedComments");
}
var pos = detachedRange.pos, end = detachedRange.end;
var emitFlags = ts.getEmitFlags(node);
var skipLeadingComments = pos < 0 || (emitFlags & 512) !== 0;
var skipTrailingComments = disabled || end < 0 || (emitFlags & 1024) !== 0;
if (!skipLeadingComments) {
emitDetachedCommentsAndUpdateCommentsInfo(detachedRange);
}
if (extendedDiagnostics) {
ts.performance.measure("commentTime", "preEmitBodyWithDetachedComments");
}
if (emitFlags & 2048 && !disabled) {
disabled = true;
emitCallback(node);
disabled = false;
}
else {
emitCallback(node);
}
if (extendedDiagnostics) {
ts.performance.mark("beginEmitBodyWithDetachedCommetns");
}
if (!skipTrailingComments) {
emitLeadingComments(detachedRange.end, true);
if (hasWrittenComment && !writer.isAtStartOfLine()) {
writer.writeLine();
}
}
if (extendedDiagnostics) {
ts.performance.measure("commentTime", "beginEmitBodyWithDetachedCommetns");
}
}
function emitLeadingComments(pos, isEmittedNode) {
hasWrittenComment = false;
if (isEmittedNode) {
forEachLeadingCommentToEmit(pos, emitLeadingComment);
}
else if (pos === 0) {
forEachLeadingCommentToEmit(pos, emitTripleSlashLeadingComment);
}
}
function emitTripleSlashLeadingComment(commentPos, commentEnd, kind, hasTrailingNewLine, rangePos) {
if (isTripleSlashComment(commentPos, commentEnd)) {
emitLeadingComment(commentPos, commentEnd, kind, hasTrailingNewLine, rangePos);
}
}
function emitLeadingComment(commentPos, commentEnd, _kind, hasTrailingNewLine, rangePos) {
if (!hasWrittenComment) {
ts.emitNewLineBeforeLeadingCommentOfPosition(currentLineMap, writer, rangePos, commentPos);
hasWrittenComment = true;
}
if (emitPos)
emitPos(commentPos);
ts.writeCommentRange(currentText, currentLineMap, writer, commentPos, commentEnd, newLine);
if (emitPos)
emitPos(commentEnd);
if (hasTrailingNewLine) {
writer.writeLine();
}
else {
writer.write(" ");
}
}
function emitLeadingCommentsOfPosition(pos) {
if (disabled || pos === -1) {
return;
}
emitLeadingComments(pos, true);
}
function emitTrailingComments(pos) {
forEachTrailingCommentToEmit(pos, emitTrailingComment);
}
function emitTrailingComment(commentPos, commentEnd, _kind, hasTrailingNewLine) {
if (!writer.isAtStartOfLine()) {
writer.write(" ");
}
if (emitPos)
emitPos(commentPos);
ts.writeCommentRange(currentText, currentLineMap, writer, commentPos, commentEnd, newLine);
if (emitPos)
emitPos(commentEnd);
if (hasTrailingNewLine) {
writer.writeLine();
}
}
function emitTrailingCommentsOfPosition(pos, prefixSpace) {
if (disabled) {
return;
}
if (extendedDiagnostics) {
ts.performance.mark("beforeEmitTrailingCommentsOfPosition");
}
forEachTrailingCommentToEmit(pos, prefixSpace ? emitTrailingComment : emitTrailingCommentOfPosition);
if (extendedDiagnostics) {
ts.performance.measure("commentTime", "beforeEmitTrailingCommentsOfPosition");
}
}
function emitTrailingCommentOfPosition(commentPos, commentEnd, _kind, hasTrailingNewLine) {
if (emitPos)
emitPos(commentPos);
ts.writeCommentRange(currentText, currentLineMap, writer, commentPos, commentEnd, newLine);
if (emitPos)
emitPos(commentEnd);
if (hasTrailingNewLine) {
writer.writeLine();
}
else {
writer.write(" ");
}
}
function forEachLeadingCommentToEmit(pos, cb) {
if (containerPos === -1 || pos !== containerPos) {
if (hasDetachedComments(pos)) {
forEachLeadingCommentWithoutDetachedComments(cb);
}
else {
ts.forEachLeadingCommentRange(currentText, pos, cb, pos);
}
}
}
function forEachTrailingCommentToEmit(end, cb) {
if (containerEnd === -1 || (end !== containerEnd && end !== declarationListContainerEnd)) {
ts.forEachTrailingCommentRange(currentText, end, cb);
}
}
function reset() {
currentSourceFile = undefined;
currentText = undefined;
currentLineMap = undefined;
detachedCommentsInfo = undefined;
}
function setWriter(output) {
writer = output;
}
function setSourceFile(sourceFile) {
currentSourceFile = sourceFile;
currentText = currentSourceFile.text;
currentLineMap = ts.getLineStarts(currentSourceFile);
detachedCommentsInfo = undefined;
}
function hasDetachedComments(pos) {
return detachedCommentsInfo !== undefined && ts.lastOrUndefined(detachedCommentsInfo).nodePos === pos;
}
function forEachLeadingCommentWithoutDetachedComments(cb) {
var pos = ts.lastOrUndefined(detachedCommentsInfo).detachedCommentEndPos;
if (detachedCommentsInfo.length - 1) {
detachedCommentsInfo.pop();
}
else {
detachedCommentsInfo = undefined;
}
ts.forEachLeadingCommentRange(currentText, pos, cb, pos);
}
function emitDetachedCommentsAndUpdateCommentsInfo(range) {
var currentDetachedCommentInfo = ts.emitDetachedComments(currentText, currentLineMap, writer, writeComment, range, newLine, disabled);
if (currentDetachedCommentInfo) {
if (detachedCommentsInfo) {
detachedCommentsInfo.push(currentDetachedCommentInfo);
}
else {
detachedCommentsInfo = [currentDetachedCommentInfo];
}
}
}
function writeComment(text, lineMap, writer, commentPos, commentEnd, newLine) {
if (emitPos)
emitPos(commentPos);
ts.writeCommentRange(text, lineMap, writer, commentPos, commentEnd, newLine);
if (emitPos)
emitPos(commentEnd);
}
function isTripleSlashComment(commentPos, commentEnd) {
return ts.isRecognizedTripleSlashComment(currentText, commentPos, commentEnd);
}
}
ts.createCommentWriter = createCommentWriter;
})(ts || (ts = {}));
var ts;
(function (ts) {
function getDeclarationDiagnostics(host, resolver, targetSourceFile) {
var declarationDiagnostics = ts.createDiagnosticCollection();
ts.forEachEmittedFile(host, getDeclarationDiagnosticsFromFile, targetSourceFile);
return declarationDiagnostics.getDiagnostics(targetSourceFile ? targetSourceFile.fileName : undefined);
function getDeclarationDiagnosticsFromFile(_a, sourceFileOrBundle) {
var declarationFilePath = _a.declarationFilePath;
emitDeclarations(host, resolver, declarationDiagnostics, declarationFilePath, sourceFileOrBundle, false);
}
}
ts.getDeclarationDiagnostics = getDeclarationDiagnostics;
function emitDeclarations(host, resolver, emitterDiagnostics, declarationFilePath, sourceFileOrBundle, emitOnlyDtsFiles) {
var sourceFiles = sourceFileOrBundle.kind === 266 ? sourceFileOrBundle.sourceFiles : [sourceFileOrBundle];
var isBundledEmit = sourceFileOrBundle.kind === 266;
var newLine = host.getNewLine();
var compilerOptions = host.getCompilerOptions();
var write;
var writeLine;
var increaseIndent;
var decreaseIndent;
var writeTextOfNode;
var writer;
createAndSetNewTextWriterWithSymbolWriter();
var enclosingDeclaration;
var resultHasExternalModuleIndicator;
var currentText;
var currentLineMap;
var currentIdentifiers;
var isCurrentFileExternalModule;
var reportedDeclarationError = false;
var errorNameNode;
var emitJsDocComments = compilerOptions.removeComments ? ts.noop : writeJsDocComments;
var emit = compilerOptions.stripInternal ? stripInternal : emitNode;
var needsDeclare = true;
var moduleElementDeclarationEmitInfo = [];
var asynchronousSubModuleDeclarationEmitInfo;
var referencesOutput = "";
var usedTypeDirectiveReferences;
var emittedReferencedFiles = [];
var addedGlobalFileReference = false;
var allSourcesModuleElementDeclarationEmitInfo = [];
ts.forEach(sourceFiles, function (sourceFile) {
if (ts.isSourceFileJavaScript(sourceFile)) {
return;
}
if (!compilerOptions.noResolve) {
ts.forEach(sourceFile.referencedFiles, function (fileReference) {
var referencedFile = ts.tryResolveScriptReference(host, sourceFile, fileReference);
if (referencedFile && !ts.contains(emittedReferencedFiles, referencedFile)) {
if (writeReferencePath(referencedFile, !isBundledEmit && !addedGlobalFileReference, emitOnlyDtsFiles)) {
addedGlobalFileReference = true;
}
emittedReferencedFiles.push(referencedFile);
}
});
}
resultHasExternalModuleIndicator = false;
if (!isBundledEmit || !ts.isExternalModule(sourceFile)) {
needsDeclare = true;
emitSourceFile(sourceFile);
}
else if (ts.isExternalModule(sourceFile)) {
needsDeclare = false;
write("declare module \"" + ts.getResolvedExternalModuleName(host, sourceFile) + "\" {");
writeLine();
increaseIndent();
emitSourceFile(sourceFile);
decreaseIndent();
write("}");
writeLine();
}
if (moduleElementDeclarationEmitInfo.length) {
var oldWriter = writer;
ts.forEach(moduleElementDeclarationEmitInfo, function (aliasEmitInfo) {
if (aliasEmitInfo.isVisible && !aliasEmitInfo.asynchronousOutput) {
ts.Debug.assert(aliasEmitInfo.node.kind === 238);
createAndSetNewTextWriterWithSymbolWriter();
ts.Debug.assert(aliasEmitInfo.indent === 0 || (aliasEmitInfo.indent === 1 && isBundledEmit));
for (var i = 0; i < aliasEmitInfo.indent; i++) {
increaseIndent();
}
writeImportDeclaration(aliasEmitInfo.node);
aliasEmitInfo.asynchronousOutput = writer.getText();
for (var i = 0; i < aliasEmitInfo.indent; i++) {
decreaseIndent();
}
}
});
setWriter(oldWriter);
allSourcesModuleElementDeclarationEmitInfo = allSourcesModuleElementDeclarationEmitInfo.concat(moduleElementDeclarationEmitInfo);
moduleElementDeclarationEmitInfo = [];
}
if (!isBundledEmit && ts.isExternalModule(sourceFile) && sourceFile.moduleAugmentations.length && !resultHasExternalModuleIndicator) {
write("export {};");
writeLine();
}
});
if (usedTypeDirectiveReferences) {
ts.forEachKey(usedTypeDirectiveReferences, function (directive) {
referencesOutput += "/// <reference types=\"" + directive + "\" />" + newLine;
});
}
return {
reportedDeclarationError: reportedDeclarationError,
moduleElementDeclarationEmitInfo: allSourcesModuleElementDeclarationEmitInfo,
synchronousDeclarationOutput: writer.getText(),
referencesOutput: referencesOutput,
};
function hasInternalAnnotation(range) {
var comment = currentText.substring(range.pos, range.end);
return ts.stringContains(comment, "@internal");
}
function stripInternal(node) {
if (node) {
var leadingCommentRanges = ts.getLeadingCommentRanges(currentText, node.pos);
if (ts.forEach(leadingCommentRanges, hasInternalAnnotation)) {
return;
}
emitNode(node);
}
}
function createAndSetNewTextWriterWithSymbolWriter() {
var writer = ts.createTextWriter(newLine);
writer.trackSymbol = trackSymbol;
writer.reportInaccessibleThisError = reportInaccessibleThisError;
writer.reportPrivateInBaseOfClassExpression = reportPrivateInBaseOfClassExpression;
writer.writeKeyword = writer.write;
writer.writeOperator = writer.write;
writer.writePunctuation = writer.write;
writer.writeSpace = writer.write;
writer.writeStringLiteral = writer.writeLiteral;
writer.writeParameter = writer.write;
writer.writeProperty = writer.write;
writer.writeSymbol = writer.write;
setWriter(writer);
}
function setWriter(newWriter) {
writer = newWriter;
write = newWriter.write;
writeTextOfNode = newWriter.writeTextOfNode;
writeLine = newWriter.writeLine;
increaseIndent = newWriter.increaseIndent;
decreaseIndent = newWriter.decreaseIndent;
}
function writeAsynchronousModuleElements(nodes) {
var oldWriter = writer;
ts.forEach(nodes, function (declaration) {
var nodeToCheck;
if (declaration.kind === 226) {
nodeToCheck = declaration.parent.parent;
}
else if (declaration.kind === 241 || declaration.kind === 242 || declaration.kind === 239) {
ts.Debug.fail("We should be getting ImportDeclaration instead to write");
}
else {
nodeToCheck = declaration;
}
var moduleElementEmitInfo = ts.forEach(moduleElementDeclarationEmitInfo, function (declEmitInfo) { return declEmitInfo.node === nodeToCheck ? declEmitInfo : undefined; });
if (!moduleElementEmitInfo && asynchronousSubModuleDeclarationEmitInfo) {
moduleElementEmitInfo = ts.forEach(asynchronousSubModuleDeclarationEmitInfo, function (declEmitInfo) { return declEmitInfo.node === nodeToCheck ? declEmitInfo : undefined; });
}
if (moduleElementEmitInfo) {
if (moduleElementEmitInfo.node.kind === 238) {
moduleElementEmitInfo.isVisible = true;
}
else {
createAndSetNewTextWriterWithSymbolWriter();
for (var declarationIndent = moduleElementEmitInfo.indent; declarationIndent; declarationIndent--) {
increaseIndent();
}
if (nodeToCheck.kind === 233) {
ts.Debug.assert(asynchronousSubModuleDeclarationEmitInfo === undefined);
asynchronousSubModuleDeclarationEmitInfo = [];
}
writeModuleElement(nodeToCheck);
if (nodeToCheck.kind === 233) {
moduleElementEmitInfo.subModuleElementDeclarationEmitInfo = asynchronousSubModuleDeclarationEmitInfo;
asynchronousSubModuleDeclarationEmitInfo = undefined;
}
moduleElementEmitInfo.asynchronousOutput = writer.getText();
}
}
});
setWriter(oldWriter);
}
function recordTypeReferenceDirectivesIfNecessary(typeReferenceDirectives) {
if (!typeReferenceDirectives) {
return;
}
if (!usedTypeDirectiveReferences) {
usedTypeDirectiveReferences = ts.createMap();
}
for (var _i = 0, typeReferenceDirectives_1 = typeReferenceDirectives; _i < typeReferenceDirectives_1.length; _i++) {
var directive = typeReferenceDirectives_1[_i];
if (!usedTypeDirectiveReferences.has(directive)) {
usedTypeDirectiveReferences.set(directive, directive);
}
}
}
function handleSymbolAccessibilityError(symbolAccessibilityResult) {
if (symbolAccessibilityResult.accessibility === 0) {
if (symbolAccessibilityResult && symbolAccessibilityResult.aliasesToMakeVisible) {
writeAsynchronousModuleElements(symbolAccessibilityResult.aliasesToMakeVisible);
}
}
else {
reportedDeclarationError = true;
var errorInfo = writer.getSymbolAccessibilityDiagnostic(symbolAccessibilityResult);
if (errorInfo) {
if (errorInfo.typeName) {
emitterDiagnostics.add(ts.createDiagnosticForNode(symbolAccessibilityResult.errorNode || errorInfo.errorNode, errorInfo.diagnosticMessage, ts.getTextOfNodeFromSourceText(currentText, errorInfo.typeName), symbolAccessibilityResult.errorSymbolName, symbolAccessibilityResult.errorModuleName));
}
else {
emitterDiagnostics.add(ts.createDiagnosticForNode(symbolAccessibilityResult.errorNode || errorInfo.errorNode, errorInfo.diagnosticMessage, symbolAccessibilityResult.errorSymbolName, symbolAccessibilityResult.errorModuleName));
}
}
}
}
function trackSymbol(symbol, enclosingDeclaration, meaning) {
handleSymbolAccessibilityError(resolver.isSymbolAccessible(symbol, enclosingDeclaration, meaning, true));
recordTypeReferenceDirectivesIfNecessary(resolver.getTypeReferenceDirectivesForSymbol(symbol, meaning));
}
function reportPrivateInBaseOfClassExpression(propertyName) {
if (errorNameNode) {
reportedDeclarationError = true;
emitterDiagnostics.add(ts.createDiagnosticForNode(errorNameNode, ts.Diagnostics.Property_0_of_exported_class_expression_may_not_be_private_or_protected, propertyName));
}
}
function reportInaccessibleThisError() {
if (errorNameNode) {
reportedDeclarationError = true;
emitterDiagnostics.add(ts.createDiagnosticForNode(errorNameNode, ts.Diagnostics.The_inferred_type_of_0_references_an_inaccessible_this_type_A_type_annotation_is_necessary, ts.declarationNameToString(errorNameNode)));
}
}
function writeTypeOfDeclaration(declaration, type, getSymbolAccessibilityDiagnostic) {
writer.getSymbolAccessibilityDiagnostic = getSymbolAccessibilityDiagnostic;
write(": ");
var shouldUseResolverType = declaration.kind === 146 &&
(resolver.isRequiredInitializedParameter(declaration) ||
resolver.isOptionalUninitializedParameterProperty(declaration));
if (type && !shouldUseResolverType) {
emitType(type);
}
else {
errorNameNode = declaration.name;
var format = 4 |
16384 |
(shouldUseResolverType ? 8192 : 0);
resolver.writeTypeOfDeclaration(declaration, enclosingDeclaration, format, writer);
errorNameNode = undefined;
}
}
function writeReturnTypeAtSignature(signature, getSymbolAccessibilityDiagnostic) {
writer.getSymbolAccessibilityDiagnostic = getSymbolAccessibilityDiagnostic;
write(": ");
if (signature.type) {
emitType(signature.type);
}
else {
errorNameNode = signature.name;
resolver.writeReturnTypeOfSignatureDeclaration(signature, enclosingDeclaration, 4 | 16384, writer);
errorNameNode = undefined;
}
}
function emitLines(nodes) {
for (var _i = 0, nodes_6 = nodes; _i < nodes_6.length; _i++) {
var node = nodes_6[_i];
emit(node);
}
}
function emitSeparatedList(nodes, separator, eachNodeEmitFn, canEmitFn) {
var currentWriterPos = writer.getTextPos();
for (var _i = 0, nodes_7 = nodes; _i < nodes_7.length; _i++) {
var node = nodes_7[_i];
if (!canEmitFn || canEmitFn(node)) {
if (currentWriterPos !== writer.getTextPos()) {
write(separator);
}
currentWriterPos = writer.getTextPos();
eachNodeEmitFn(node);
}
}
}
function emitCommaList(nodes, eachNodeEmitFn, canEmitFn) {
emitSeparatedList(nodes, ", ", eachNodeEmitFn, canEmitFn);
}
function writeJsDocComments(declaration) {
if (declaration) {
var jsDocComments = ts.getJSDocCommentRanges(declaration, currentText);
ts.emitNewLineBeforeLeadingComments(currentLineMap, writer, declaration, jsDocComments);
ts.emitComments(currentText, currentLineMap, writer, jsDocComments, false, true, newLine, ts.writeCommentRange);
}
}
function emitTypeWithNewGetSymbolAccessibilityDiagnostic(type, getSymbolAccessibilityDiagnostic) {
writer.getSymbolAccessibilityDiagnostic = getSymbolAccessibilityDiagnostic;
emitType(type);
}
function emitType(type) {
switch (type.kind) {
case 119:
case 136:
case 133:
case 122:
case 134:
case 137:
case 105:
case 139:
case 95:
case 130:
case 169:
case 173:
return writeTextOfNode(currentText, type);
case 201:
return emitExpressionWithTypeArguments(type);
case 159:
return emitTypeReference(type);
case 162:
return emitTypeQuery(type);
case 164:
return emitArrayType(type);
case 165:
return emitTupleType(type);
case 166:
return emitUnionType(type);
case 167:
return emitIntersectionType(type);
case 168:
return emitParenType(type);
case 170:
return emitTypeOperator(type);
case 171:
return emitIndexedAccessType(type);
case 172:
return emitMappedType(type);
case 160:
case 161:
return emitSignatureDeclarationWithJsDocComments(type);
case 163:
return emitTypeLiteral(type);
case 71:
return emitEntityName(type);
case 143:
return emitEntityName(type);
case 158:
return emitTypePredicate(type);
}
function writeEntityName(entityName) {
if (entityName.kind === 71) {
writeTextOfNode(currentText, entityName);
}
else {
var left = entityName.kind === 143 ? entityName.left : entityName.expression;
var right = entityName.kind === 143 ? entityName.right : entityName.name;
writeEntityName(left);
write(".");
writeTextOfNode(currentText, right);
}
}
function emitEntityName(entityName) {
var visibilityResult = resolver.isEntityNameVisible(entityName, entityName.parent.kind === 237 ? entityName.parent : enclosingDeclaration);
handleSymbolAccessibilityError(visibilityResult);
recordTypeReferenceDirectivesIfNecessary(resolver.getTypeReferenceDirectivesForEntityName(entityName));
writeEntityName(entityName);
}
function emitExpressionWithTypeArguments(node) {
if (ts.isEntityNameExpression(node.expression)) {
ts.Debug.assert(node.expression.kind === 71 || node.expression.kind === 179);
emitEntityName(node.expression);
if (node.typeArguments) {
write("<");
emitCommaList(node.typeArguments, emitType);
write(">");
}
}
}
function emitTypeReference(type) {
emitEntityName(type.typeName);
if (type.typeArguments) {
write("<");
emitCommaList(type.typeArguments, emitType);
write(">");
}
}
function emitTypePredicate(type) {
writeTextOfNode(currentText, type.parameterName);
write(" is ");
emitType(type.type);
}
function emitTypeQuery(type) {
write("typeof ");
emitEntityName(type.exprName);
}
function emitArrayType(type) {
emitType(type.elementType);
write("[]");
}
function emitTupleType(type) {
write("[");
emitCommaList(type.elementTypes, emitType);
write("]");
}
function emitUnionType(type) {
emitSeparatedList(type.types, " | ", emitType);
}
function emitIntersectionType(type) {
emitSeparatedList(type.types, " & ", emitType);
}
function emitParenType(type) {
write("(");
emitType(type.type);
write(")");
}
function emitTypeOperator(type) {
write(ts.tokenToString(type.operator));
write(" ");
emitType(type.type);
}
function emitIndexedAccessType(node) {
emitType(node.objectType);
write("[");
emitType(node.indexType);
write("]");
}
function emitMappedType(node) {
var prevEnclosingDeclaration = enclosingDeclaration;
enclosingDeclaration = node;
write("{");
writeLine();
increaseIndent();
if (node.readonlyToken) {
write("readonly ");
}
write("[");
writeEntityName(node.typeParameter.name);
write(" in ");
emitType(node.typeParameter.constraint);
write("]");
if (node.questionToken) {
write("?");
}
write(": ");
emitType(node.type);
write(";");
writeLine();
decreaseIndent();
write("}");
enclosingDeclaration = prevEnclosingDeclaration;
}
function emitTypeLiteral(type) {
write("{");
if (type.members.length) {
writeLine();
increaseIndent();
emitLines(type.members);
decreaseIndent();
}
write("}");
}
}
function emitSourceFile(node) {
currentText = node.text;
currentLineMap = ts.getLineStarts(node);
currentIdentifiers = node.identifiers;
isCurrentFileExternalModule = ts.isExternalModule(node);
enclosingDeclaration = node;
ts.emitDetachedComments(currentText, currentLineMap, writer, ts.writeCommentRange, node, newLine, true);
emitLines(node.statements);
}
function getExportTempVariableName(baseName) {
if (!currentIdentifiers.has(baseName)) {
return baseName;
}
var count = 0;
while (true) {
count++;
var name = baseName + "_" + count;
if (!currentIdentifiers.has(name)) {
return name;
}
}
}
function emitTempVariableDeclaration(expr, baseName, diagnostic, needsDeclare) {
var tempVarName = getExportTempVariableName(baseName);
if (needsDeclare) {
write("declare ");
}
write("const ");
write(tempVarName);
write(": ");
writer.getSymbolAccessibilityDiagnostic = function () { return diagnostic; };
resolver.writeTypeOfExpression(expr, enclosingDeclaration, 4 | 16384, writer);
write(";");
writeLine();
return tempVarName;
}
function emitExportAssignment(node) {
if (node.expression.kind === 71) {
write(node.isExportEquals ? "export = " : "export default ");
writeTextOfNode(currentText, node.expression);
}
else {
var tempVarName = emitTempVariableDeclaration(node.expression, "_default", {
diagnosticMessage: ts.Diagnostics.Default_export_of_the_module_has_or_is_using_private_name_0,
errorNode: node
}, needsDeclare);
write(node.isExportEquals ? "export = " : "export default ");
write(tempVarName);
}
write(";");
writeLine();
if (node.expression.kind === 71) {
var nodes = resolver.collectLinkedAliases(node.expression);
writeAsynchronousModuleElements(nodes);
}
}
function isModuleElementVisible(node) {
return resolver.isDeclarationVisible(node);
}
function emitModuleElement(node, isModuleElementVisible) {
if (isModuleElementVisible) {
writeModuleElement(node);
}
else if (node.kind === 237 ||
(node.parent.kind === 265 && isCurrentFileExternalModule)) {
var isVisible = void 0;
if (asynchronousSubModuleDeclarationEmitInfo && node.parent.kind !== 265) {
asynchronousSubModuleDeclarationEmitInfo.push({
node: node,
outputPos: writer.getTextPos(),
indent: writer.getIndent(),
isVisible: isVisible
});
}
else {
if (node.kind === 238) {
var importDeclaration = node;
if (importDeclaration.importClause) {
isVisible = (importDeclaration.importClause.name && resolver.isDeclarationVisible(importDeclaration.importClause)) ||
isVisibleNamedBinding(importDeclaration.importClause.namedBindings);
}
}
moduleElementDeclarationEmitInfo.push({
node: node,
outputPos: writer.getTextPos(),
indent: writer.getIndent(),
isVisible: isVisible
});
}
}
}
function writeModuleElement(node) {
switch (node.kind) {
case 228:
return writeFunctionDeclaration(node);
case 208:
return writeVariableStatement(node);
case 230:
return writeInterfaceDeclaration(node);
case 229:
return writeClassDeclaration(node);
case 231:
return writeTypeAliasDeclaration(node);
case 232:
return writeEnumDeclaration(node);
case 233:
return writeModuleDeclaration(node);
case 237:
return writeImportEqualsDeclaration(node);
case 238:
return writeImportDeclaration(node);
default:
ts.Debug.fail("Unknown symbol kind");
}
}
function emitModuleElementDeclarationFlags(node) {
if (node.parent.kind === 265) {
var modifiers = ts.getModifierFlags(node);
if (modifiers & 1) {
write("export ");
}
if (modifiers & 512) {
write("default ");
}
else if (node.kind !== 230 && needsDeclare) {
write("declare ");
}
}
}
function emitClassMemberDeclarationFlags(flags) {
if (flags & 8) {
write("private ");
}
else if (flags & 16) {
write("protected ");
}
if (flags & 32) {
write("static ");
}
if (flags & 64) {
write("readonly ");
}
if (flags & 128) {
write("abstract ");
}
}
function writeImportEqualsDeclaration(node) {
emitJsDocComments(node);
if (ts.hasModifier(node, 1)) {
write("export ");
}
write("import ");
writeTextOfNode(currentText, node.name);
write(" = ");
if (ts.isInternalModuleImportEqualsDeclaration(node)) {
emitTypeWithNewGetSymbolAccessibilityDiagnostic(node.moduleReference, getImportEntityNameVisibilityError);
write(";");
}
else {
write("require(");
emitExternalModuleSpecifier(node);
write(");");
}
writer.writeLine();
function getImportEntityNameVisibilityError() {
return {
diagnosticMessage: ts.Diagnostics.Import_declaration_0_is_using_private_name_1,
errorNode: node,
typeName: node.name
};
}
}
function isVisibleNamedBinding(namedBindings) {
if (namedBindings) {
if (namedBindings.kind === 240) {
return resolver.isDeclarationVisible(namedBindings);
}
else {
return ts.forEach(namedBindings.elements, function (namedImport) { return resolver.isDeclarationVisible(namedImport); });
}
}
}
function writeImportDeclaration(node) {
emitJsDocComments(node);
if (ts.hasModifier(node, 1)) {
write("export ");
}
write("import ");
if (node.importClause) {
var currentWriterPos = writer.getTextPos();
if (node.importClause.name && resolver.isDeclarationVisible(node.importClause)) {
writeTextOfNode(currentText, node.importClause.name);
}
if (node.importClause.namedBindings && isVisibleNamedBinding(node.importClause.namedBindings)) {
if (currentWriterPos !== writer.getTextPos()) {
write(", ");
}
if (node.importClause.namedBindings.kind === 240) {
write("* as ");
writeTextOfNode(currentText, node.importClause.namedBindings.name);
}
else {
write("{ ");
emitCommaList(node.importClause.namedBindings.elements, emitImportOrExportSpecifier, resolver.isDeclarationVisible);
write(" }");
}
}
write(" from ");
}
emitExternalModuleSpecifier(node);
write(";");
writer.writeLine();
}
function emitExternalModuleSpecifier(parent) {
resultHasExternalModuleIndicator = resultHasExternalModuleIndicator || parent.kind !== 233;
var moduleSpecifier;
if (parent.kind === 237) {
var node = parent;
moduleSpecifier = ts.getExternalModuleImportEqualsDeclarationExpression(node);
}
else if (parent.kind === 233) {
moduleSpecifier = parent.name;
}
else {
var node = parent;
moduleSpecifier = node.moduleSpecifier;
}
if (moduleSpecifier.kind === 9 && isBundledEmit && (compilerOptions.out || compilerOptions.outFile)) {
var moduleName = ts.getExternalModuleNameFromDeclaration(host, resolver, parent);
if (moduleName) {
write('"');
write(moduleName);
write('"');
return;
}
}
writeTextOfNode(currentText, moduleSpecifier);
}
function emitImportOrExportSpecifier(node) {
if (node.propertyName) {
writeTextOfNode(currentText, node.propertyName);
write(" as ");
}
writeTextOfNode(currentText, node.name);
}
function emitExportSpecifier(node) {
emitImportOrExportSpecifier(node);
var nodes = resolver.collectLinkedAliases(node.propertyName || node.name);
writeAsynchronousModuleElements(nodes);
}
function emitExportDeclaration(node) {
emitJsDocComments(node);
write("export ");
if (node.exportClause) {
write("{ ");
emitCommaList(node.exportClause.elements, emitExportSpecifier);
write(" }");
}
else {
write("*");
}
if (node.moduleSpecifier) {
write(" from ");
emitExternalModuleSpecifier(node);
}
write(";");
writer.writeLine();
}
function writeModuleDeclaration(node) {
emitJsDocComments(node);
emitModuleElementDeclarationFlags(node);
if (ts.isGlobalScopeAugmentation(node)) {
write("global ");
}
else {
if (node.flags & 16) {
write("namespace ");
}
else {
write("module ");
}
if (ts.isExternalModuleAugmentation(node)) {
emitExternalModuleSpecifier(node);
}
else {
writeTextOfNode(currentText, node.name);
}
}
while (node.body && node.body.kind !== 234) {
node = node.body;
write(".");
writeTextOfNode(currentText, node.name);
}
var prevEnclosingDeclaration = enclosingDeclaration;
if (node.body) {
enclosingDeclaration = node;
write(" {");
writeLine();
increaseIndent();
emitLines(node.body.statements);
decreaseIndent();
write("}");
writeLine();
enclosingDeclaration = prevEnclosingDeclaration;
}
else {
write(";");
}
}
function writeTypeAliasDeclaration(node) {
var prevEnclosingDeclaration = enclosingDeclaration;
enclosingDeclaration = node;
emitJsDocComments(node);
emitModuleElementDeclarationFlags(node);
write("type ");
writeTextOfNode(currentText, node.name);
emitTypeParameters(node.typeParameters);
write(" = ");
emitTypeWithNewGetSymbolAccessibilityDiagnostic(node.type, getTypeAliasDeclarationVisibilityError);
write(";");
writeLine();
enclosingDeclaration = prevEnclosingDeclaration;
function getTypeAliasDeclarationVisibilityError() {
return {
diagnosticMessage: ts.Diagnostics.Exported_type_alias_0_has_or_is_using_private_name_1,
errorNode: node.type,
typeName: node.name
};
}
}
function writeEnumDeclaration(node) {
emitJsDocComments(node);
emitModuleElementDeclarationFlags(node);
if (ts.isConst(node)) {
write("const ");
}
write("enum ");
writeTextOfNode(currentText, node.name);
write(" {");
writeLine();
increaseIndent();
emitLines(node.members);
decreaseIndent();
write("}");
writeLine();
}
function emitEnumMemberDeclaration(node) {
emitJsDocComments(node);
writeTextOfNode(currentText, node.name);
var enumMemberValue = resolver.getConstantValue(node);
if (enumMemberValue !== undefined) {
write(" = ");
write(ts.getTextOfConstantValue(enumMemberValue));
}
write(",");
writeLine();
}
function isPrivateMethodTypeParameter(node) {
return node.parent.kind === 151 && ts.hasModifier(node.parent, 8);
}
function emitTypeParameters(typeParameters) {
function emitTypeParameter(node) {
increaseIndent();
emitJsDocComments(node);
decreaseIndent();
writeTextOfNode(currentText, node.name);
if (node.constraint && !isPrivateMethodTypeParameter(node)) {
write(" extends ");
if (node.parent.kind === 160 ||
node.parent.kind === 161 ||
(node.parent.parent && node.parent.parent.kind === 163)) {
ts.Debug.assert(node.parent.kind === 151 ||
node.parent.kind === 150 ||
node.parent.kind === 160 ||
node.parent.kind === 161 ||
node.parent.kind === 155 ||
node.parent.kind === 156);
emitType(node.constraint);
}
else {
emitTypeWithNewGetSymbolAccessibilityDiagnostic(node.constraint, getTypeParameterConstraintVisibilityError);
}
}
if (node.default && !isPrivateMethodTypeParameter(node)) {
write(" = ");
if (node.parent.kind === 160 ||
node.parent.kind === 161 ||
(node.parent.parent && node.parent.parent.kind === 163)) {
ts.Debug.assert(node.parent.kind === 151 ||
node.parent.kind === 150 ||
node.parent.kind === 160 ||
node.parent.kind === 161 ||
node.parent.kind === 155 ||
node.parent.kind === 156);
emitType(node.default);
}
else {
emitTypeWithNewGetSymbolAccessibilityDiagnostic(node.default, getTypeParameterConstraintVisibilityError);
}
}
function getTypeParameterConstraintVisibilityError() {
var diagnosticMessage;
switch (node.parent.kind) {
case 229:
diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_private_name_1;
break;
case 230:
diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1;
break;
case 156:
diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1;
break;
case 155:
diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1;
break;
case 151:
case 150:
if (ts.hasModifier(node.parent, 32)) {
diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1;
}
else if (node.parent.parent.kind === 229) {
diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1;
}
else {
diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1;
}
break;
case 228:
diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1;
break;
case 231:
diagnosticMessage = ts.Diagnostics.Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1;
break;
default:
ts.Debug.fail("This is unknown parent for type parameter: " + node.parent.kind);
}
return {
diagnosticMessage: diagnosticMessage,
errorNode: node,
typeName: node.name
};
}
}
if (typeParameters) {
write("<");
emitCommaList(typeParameters, emitTypeParameter);
write(">");
}
}
function emitHeritageClause(typeReferences, isImplementsList) {
if (typeReferences) {
write(isImplementsList ? " implements " : " extends ");
emitCommaList(typeReferences, emitTypeOfTypeReference);
}
function emitTypeOfTypeReference(node) {
if (ts.isEntityNameExpression(node.expression)) {
emitTypeWithNewGetSymbolAccessibilityDiagnostic(node, getHeritageClauseVisibilityError);
}
else if (!isImplementsList && node.expression.kind === 95) {
write("null");
}
function getHeritageClauseVisibilityError() {
var diagnosticMessage;
if (node.parent.parent.kind === 229) {
diagnosticMessage = isImplementsList ?
ts.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_private_name_1 :
ts.Diagnostics.extends_clause_of_exported_class_0_has_or_is_using_private_name_1;
}
else {
diagnosticMessage = ts.Diagnostics.extends_clause_of_exported_interface_0_has_or_is_using_private_name_1;
}
return {
diagnosticMessage: diagnosticMessage,
errorNode: node,
typeName: ts.getNameOfDeclaration(node.parent.parent)
};
}
}
}
function writeClassDeclaration(node) {
function emitParameterProperties(constructorDeclaration) {
if (constructorDeclaration) {
ts.forEach(constructorDeclaration.parameters, function (param) {
if (ts.hasModifier(param, 92)) {
emitPropertyDeclaration(param);
}
});
}
}
var prevEnclosingDeclaration = enclosingDeclaration;
enclosingDeclaration = node;
var baseTypeNode = ts.getClassExtendsHeritageClauseElement(node);
var tempVarName;
if (baseTypeNode && !ts.isEntityNameExpression(baseTypeNode.expression)) {
tempVarName = baseTypeNode.expression.kind === 95 ?
"null" :
emitTempVariableDeclaration(baseTypeNode.expression, node.name.escapedText + "_base", {
diagnosticMessage: ts.Diagnostics.extends_clause_of_exported_class_0_has_or_is_using_private_name_1,
errorNode: baseTypeNode,
typeName: node.name
}, !ts.findAncestor(node, function (n) { return n.kind === 233; }));
}
emitJsDocComments(node);
emitModuleElementDeclarationFlags(node);
if (ts.hasModifier(node, 128)) {
write("abstract ");
}
write("class ");
writeTextOfNode(currentText, node.name);
emitTypeParameters(node.typeParameters);
if (baseTypeNode) {
if (!ts.isEntityNameExpression(baseTypeNode.expression)) {
write(" extends ");
write(tempVarName);
if (baseTypeNode.typeArguments) {
write("<");
emitCommaList(baseTypeNode.typeArguments, emitType);
write(">");
}
}
else {
emitHeritageClause([baseTypeNode], false);
}
}
emitHeritageClause(ts.getClassImplementsHeritageClauseElements(node), true);
write(" {");
writeLine();
increaseIndent();
emitParameterProperties(ts.getFirstConstructorWithBody(node));
emitLines(node.members);
decreaseIndent();
write("}");
writeLine();
enclosingDeclaration = prevEnclosingDeclaration;
}
function writeInterfaceDeclaration(node) {
emitJsDocComments(node);
emitModuleElementDeclarationFlags(node);
write("interface ");
writeTextOfNode(currentText, node.name);
var prevEnclosingDeclaration = enclosingDeclaration;
enclosingDeclaration = node;
emitTypeParameters(node.typeParameters);
var interfaceExtendsTypes = ts.filter(ts.getInterfaceBaseTypeNodes(node), function (base) { return ts.isEntityNameExpression(base.expression); });
if (interfaceExtendsTypes && interfaceExtendsTypes.length) {
emitHeritageClause(interfaceExtendsTypes, false);
}
write(" {");
writeLine();
increaseIndent();
emitLines(node.members);
decreaseIndent();
write("}");
writeLine();
enclosingDeclaration = prevEnclosingDeclaration;
}
function emitPropertyDeclaration(node) {
if (ts.hasDynamicName(node)) {
return;
}
emitJsDocComments(node);
emitClassMemberDeclarationFlags(ts.getModifierFlags(node));
emitVariableDeclaration(node);
write(";");
writeLine();
}
function emitVariableDeclaration(node) {
if (node.kind !== 226 || resolver.isDeclarationVisible(node)) {
if (ts.isBindingPattern(node.name)) {
emitBindingPattern(node.name);
}
else {
writeTextOfNode(currentText, node.name);
if ((node.kind === 149 || node.kind === 148 ||
(node.kind === 146 && !ts.isParameterPropertyDeclaration(node))) && ts.hasQuestionToken(node)) {
write("?");
}
if ((node.kind === 149 || node.kind === 148) && node.parent.kind === 163) {
emitTypeOfVariableDeclarationFromTypeLiteral(node);
}
else if (resolver.isLiteralConstDeclaration(node)) {
write(" = ");
resolver.writeLiteralConstValue(node, writer);
}
else if (!ts.hasModifier(node, 8)) {
writeTypeOfDeclaration(node, node.type, getVariableDeclarationTypeVisibilityError);
}
}
}
function getVariableDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult) {
if (node.kind === 226) {
return symbolAccessibilityResult.errorModuleName ?
symbolAccessibilityResult.accessibility === 2 ?
ts.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
ts.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_private_module_2 :
ts.Diagnostics.Exported_variable_0_has_or_is_using_private_name_1;
}
else if (node.kind === 149 || node.kind === 148 ||
(node.kind === 146 && ts.hasModifier(node.parent, 8))) {
if (ts.hasModifier(node, 32)) {
return symbolAccessibilityResult.errorModuleName ?
symbolAccessibilityResult.accessibility === 2 ?
ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 :
ts.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1;
}
else if (node.parent.kind === 229 || node.kind === 146) {
return symbolAccessibilityResult.errorModuleName ?
symbolAccessibilityResult.accessibility === 2 ?
ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 :
ts.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_private_name_1;
}
else {
return symbolAccessibilityResult.errorModuleName ?
ts.Diagnostics.Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2 :
ts.Diagnostics.Property_0_of_exported_interface_has_or_is_using_private_name_1;
}
}
}
function getVariableDeclarationTypeVisibilityError(symbolAccessibilityResult) {
var diagnosticMessage = getVariableDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult);
return diagnosticMessage !== undefined ? {
diagnosticMessage: diagnosticMessage,
errorNode: node,
typeName: node.name
} : undefined;
}
function emitBindingPattern(bindingPattern) {
var elements = [];
for (var _i = 0, _a = bindingPattern.elements; _i < _a.length; _i++) {
var element = _a[_i];
if (element.kind !== 200) {
elements.push(element);
}
}
emitCommaList(elements, emitBindingElement);
}
function emitBindingElement(bindingElement) {
function getBindingElementTypeVisibilityError(symbolAccessibilityResult) {
var diagnosticMessage = getVariableDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult);
return diagnosticMessage !== undefined ? {
diagnosticMessage: diagnosticMessage,
errorNode: bindingElement,
typeName: bindingElement.name
} : undefined;
}
if (bindingElement.name) {
if (ts.isBindingPattern(bindingElement.name)) {
emitBindingPattern(bindingElement.name);
}
else {
writeTextOfNode(currentText, bindingElement.name);
writeTypeOfDeclaration(bindingElement, undefined, getBindingElementTypeVisibilityError);
}
}
}
}
function emitTypeOfVariableDeclarationFromTypeLiteral(node) {
if (node.type) {
write(": ");
emitType(node.type);
}
}
function isVariableStatementVisible(node) {
return ts.forEach(node.declarationList.declarations, function (varDeclaration) { return resolver.isDeclarationVisible(varDeclaration); });
}
function writeVariableStatement(node) {
if (ts.every(node.declarationList && node.declarationList.declarations, function (decl) { return decl.name && ts.isEmptyBindingPattern(decl.name); })) {
return;
}
emitJsDocComments(node);
emitModuleElementDeclarationFlags(node);
if (ts.isLet(node.declarationList)) {
write("let ");
}
else if (ts.isConst(node.declarationList)) {
write("const ");
}
else {
write("var ");
}
emitCommaList(node.declarationList.declarations, emitVariableDeclaration, resolver.isDeclarationVisible);
write(";");
writeLine();
}
function emitAccessorDeclaration(node) {
if (ts.hasDynamicName(node)) {
return;
}
var accessors = ts.getAllAccessorDeclarations(node.parent.members, node);
var accessorWithTypeAnnotation;
if (node === accessors.firstAccessor) {
emitJsDocComments(accessors.getAccessor);
emitJsDocComments(accessors.setAccessor);
emitClassMemberDeclarationFlags(ts.getModifierFlags(node) | (accessors.setAccessor ? 0 : 64));
writeTextOfNode(currentText, node.name);
if (!ts.hasModifier(node, 8)) {
accessorWithTypeAnnotation = node;
var type = getTypeAnnotationFromAccessor(node);
if (!type) {
var anotherAccessor = node.kind === 153 ? accessors.setAccessor : accessors.getAccessor;
type = getTypeAnnotationFromAccessor(anotherAccessor);
if (type) {
accessorWithTypeAnnotation = anotherAccessor;
}
}
writeTypeOfDeclaration(node, type, getAccessorDeclarationTypeVisibilityError);
}
write(";");
writeLine();
}
function getTypeAnnotationFromAccessor(accessor) {
if (accessor) {
return accessor.kind === 153
? accessor.type
: accessor.parameters.length > 0
? accessor.parameters[0].type
: undefined;
}
}
function getAccessorDeclarationTypeVisibilityError(symbolAccessibilityResult) {
var diagnosticMessage;
if (accessorWithTypeAnnotation.kind === 154) {
if (ts.hasModifier(accessorWithTypeAnnotation.parent, 32)) {
diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
ts.Diagnostics.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
ts.Diagnostics.Parameter_0_of_public_static_property_setter_from_exported_class_has_or_is_using_private_name_1;
}
else {
diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
ts.Diagnostics.Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
ts.Diagnostics.Parameter_0_of_public_property_setter_from_exported_class_has_or_is_using_private_name_1;
}
return {
diagnosticMessage: diagnosticMessage,
errorNode: accessorWithTypeAnnotation.parameters[0],
typeName: accessorWithTypeAnnotation.name
};
}
else {
if (ts.hasModifier(accessorWithTypeAnnotation, 32)) {
diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
symbolAccessibilityResult.accessibility === 2 ?
ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named :
ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1 :
ts.Diagnostics.Return_type_of_public_static_property_getter_from_exported_class_has_or_is_using_private_name_0;
}
else {
diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
symbolAccessibilityResult.accessibility === 2 ?
ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named :
ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_name_0_from_private_module_1 :
ts.Diagnostics.Return_type_of_public_property_getter_from_exported_class_has_or_is_using_private_name_0;
}
return {
diagnosticMessage: diagnosticMessage,
errorNode: accessorWithTypeAnnotation.name,
typeName: undefined
};
}
}
}
function writeFunctionDeclaration(node) {
if (ts.hasDynamicName(node)) {
return;
}
if (!resolver.isImplementationOfOverload(node)) {
emitJsDocComments(node);
if (node.kind === 228) {
emitModuleElementDeclarationFlags(node);
}
else if (node.kind === 151 || node.kind === 152) {
emitClassMemberDeclarationFlags(ts.getModifierFlags(node));
}
if (node.kind === 228) {
write("function ");
writeTextOfNode(currentText, node.name);
}
else if (node.kind === 152) {
write("constructor");
}
else {
writeTextOfNode(currentText, node.name);
if (ts.hasQuestionToken(node)) {
write("?");
}
}
emitSignatureDeclaration(node);
}
}
function emitSignatureDeclarationWithJsDocComments(node) {
emitJsDocComments(node);
emitSignatureDeclaration(node);
}
function emitSignatureDeclaration(node) {
var prevEnclosingDeclaration = enclosingDeclaration;
enclosingDeclaration = node;
var closeParenthesizedFunctionType = false;
if (node.kind === 157) {
emitClassMemberDeclarationFlags(ts.getModifierFlags(node));
write("[");
}
else {
if (node.kind === 152 && ts.hasModifier(node, 8)) {
write("();");
writeLine();
return;
}
if (node.kind === 156 || node.kind === 161) {
write("new ");
}
else if (node.kind === 160) {
var currentOutput = writer.getText();
if (node.typeParameters && currentOutput.charAt(currentOutput.length - 1) === "<") {
closeParenthesizedFunctionType = true;
write("(");
}
}
emitTypeParameters(node.typeParameters);
write("(");
}
emitCommaList(node.parameters, emitParameterDeclaration);
if (node.kind === 157) {
write("]");
}
else {
write(")");
}
var isFunctionTypeOrConstructorType = node.kind === 160 || node.kind === 161;
if (isFunctionTypeOrConstructorType || node.parent.kind === 163) {
if (node.type) {
write(isFunctionTypeOrConstructorType ? " => " : ": ");
emitType(node.type);
}
}
else if (node.kind !== 152 && !ts.hasModifier(node, 8)) {
writeReturnTypeAtSignature(node, getReturnTypeVisibilityError);
}
enclosingDeclaration = prevEnclosingDeclaration;
if (!isFunctionTypeOrConstructorType) {
write(";");
writeLine();
}
else if (closeParenthesizedFunctionType) {
write(")");
}
function getReturnTypeVisibilityError(symbolAccessibilityResult) {
var diagnosticMessage;
switch (node.kind) {
case 156:
diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 :
ts.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0;
break;
case 155:
diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 :
ts.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0;
break;
case 157:
diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 :
ts.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0;
break;
case 151:
case 150:
if (ts.hasModifier(node, 32)) {
diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
symbolAccessibilityResult.accessibility === 2 ?
ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named :
ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 :
ts.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0;
}
else if (node.parent.kind === 229) {
diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
symbolAccessibilityResult.accessibility === 2 ?
ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named :
ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 :
ts.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0;
}
else {
diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1 :
ts.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0;
}
break;
case 228:
diagnosticMessage = symbolAccessibilityResult.errorModuleName ?
symbolAccessibilityResult.accessibility === 2 ?
ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named :
ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1 :
ts.Diagnostics.Return_type_of_exported_function_has_or_is_using_private_name_0;
break;
default:
ts.Debug.fail("This is unknown kind for signature: " + node.kind);
}
return {
diagnosticMessage: diagnosticMessage,
errorNode: node.name || node
};
}
}
function emitParameterDeclaration(node) {
increaseIndent();
emitJsDocComments(node);
if (node.dotDotDotToken) {
write("...");
}
if (ts.isBindingPattern(node.name)) {
emitBindingPattern(node.name);
}
else {
writeTextOfNode(currentText, node.name);
}
if (resolver.isOptionalParameter(node)) {
write("?");
}
decreaseIndent();
if (node.parent.kind === 160 ||
node.parent.kind === 161 ||
node.parent.parent.kind === 163) {
emitTypeOfVariableDeclarationFromTypeLiteral(node);
}
else if (!ts.hasModifier(node.parent, 8)) {
writeTypeOfDeclaration(node, node.type, getParameterDeclarationTypeVisibilityError);
}
function getParameterDeclarationTypeVisibilityError(symbolAccessibilityResult) {
var diagnosticMessage = getParameterDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult);
return diagnosticMessage !== undefined ? {
diagnosticMessage: diagnosticMessage,
errorNode: node,
typeName: node.name
} : undefined;
}
function getParameterDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult) {
switch (node.parent.kind) {
case 152:
return symbolAccessibilityResult.errorModuleName ?
symbolAccessibilityResult.accessibility === 2 ?
ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
ts.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1;
case 156:
return symbolAccessibilityResult.errorModuleName ?
ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
ts.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1;
case 155:
return symbolAccessibilityResult.errorModuleName ?
ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
ts.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1;
case 157:
return symbolAccessibilityResult.errorModuleName ?
ts.Diagnostics.Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
ts.Diagnostics.Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1;
case 151:
case 150:
if (ts.hasModifier(node.parent, 32)) {
return symbolAccessibilityResult.errorModuleName ?
symbolAccessibilityResult.accessibility === 2 ?
ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
ts.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1;
}
else if (node.parent.parent.kind === 229) {
return symbolAccessibilityResult.errorModuleName ?
symbolAccessibilityResult.accessibility === 2 ?
ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 :
ts.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1;
}
else {
return symbolAccessibilityResult.errorModuleName ?
ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2 :
ts.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1;
}
case 228:
return symbolAccessibilityResult.errorModuleName ?
symbolAccessibilityResult.accessibility === 2 ?
ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named :
ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2 :
ts.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_private_name_1;
default:
ts.Debug.fail("This is unknown parent for parameter: " + node.parent.kind);
}
}
function emitBindingPattern(bindingPattern) {
if (bindingPattern.kind === 174) {
write("{");
emitCommaList(bindingPattern.elements, emitBindingElement);
write("}");
}
else if (bindingPattern.kind === 175) {
write("[");
var elements = bindingPattern.elements;
emitCommaList(elements, emitBindingElement);
if (elements && elements.hasTrailingComma) {
write(", ");
}
write("]");
}
}
function emitBindingElement(bindingElement) {
if (bindingElement.kind === 200) {
write(" ");
}
else if (bindingElement.kind === 176) {
if (bindingElement.propertyName) {
writeTextOfNode(currentText, bindingElement.propertyName);
write(": ");
}
if (bindingElement.name) {
if (ts.isBindingPattern(bindingElement.name)) {
emitBindingPattern(bindingElement.name);
}
else {
ts.Debug.assert(bindingElement.name.kind === 71);
if (bindingElement.dotDotDotToken) {
write("...");
}
writeTextOfNode(currentText, bindingElement.name);
}
}
}
}
}
function emitNode(node) {
switch (node.kind) {
case 228:
case 233:
case 237:
case 230:
case 229:
case 231:
case 232:
return emitModuleElement(node, isModuleElementVisible(node));
case 208:
return emitModuleElement(node, isVariableStatementVisible(node));
case 238:
return emitModuleElement(node, !node.importClause);
case 244:
return emitExportDeclaration(node);
case 152:
case 151:
case 150:
return writeFunctionDeclaration(node);
case 156:
case 155:
case 157:
return emitSignatureDeclarationWithJsDocComments(node);
case 153:
case 154:
return emitAccessorDeclaration(node);
case 149:
case 148:
return emitPropertyDeclaration(node);
case 264:
return emitEnumMemberDeclaration(node);
case 243:
return emitExportAssignment(node);
case 265:
return emitSourceFile(node);
}
}
function writeReferencePath(referencedFile, addBundledFileReference, emitOnlyDtsFiles) {
var declFileName;
var addedBundledEmitReference = false;
if (referencedFile.isDeclarationFile) {
declFileName = referencedFile.fileName;
}
else {
ts.forEachEmittedFile(host, getDeclFileName, referencedFile, emitOnlyDtsFiles);
}
if (declFileName) {
declFileName = ts.getRelativePathToDirectoryOrUrl(ts.getDirectoryPath(ts.normalizeSlashes(declarationFilePath)), declFileName, host.getCurrentDirectory(), host.getCanonicalFileName, false);
referencesOutput += "/// <reference path=\"" + declFileName + "\" />" + newLine;
}
return addedBundledEmitReference;
function getDeclFileName(emitFileNames, sourceFileOrBundle) {
var isBundledEmit = sourceFileOrBundle.kind === 266;
if (isBundledEmit && !addBundledFileReference) {
return;
}
ts.Debug.assert(!!emitFileNames.declarationFilePath || ts.isSourceFileJavaScript(referencedFile), "Declaration file is not present only for javascript files");
declFileName = emitFileNames.declarationFilePath || emitFileNames.jsFilePath;
addedBundledEmitReference = isBundledEmit;
}
}
}
function writeDeclarationFile(declarationFilePath, sourceFileOrBundle, host, resolver, emitterDiagnostics, emitOnlyDtsFiles) {
var emitDeclarationResult = emitDeclarations(host, resolver, emitterDiagnostics, declarationFilePath, sourceFileOrBundle, emitOnlyDtsFiles);
var emitSkipped = emitDeclarationResult.reportedDeclarationError || host.isEmitBlocked(declarationFilePath) || host.getCompilerOptions().noEmit;
if (!emitSkipped) {
var sourceFiles = sourceFileOrBundle.kind === 266 ? sourceFileOrBundle.sourceFiles : [sourceFileOrBundle];
var declarationOutput = emitDeclarationResult.referencesOutput
+ getDeclarationOutput(emitDeclarationResult.synchronousDeclarationOutput, emitDeclarationResult.moduleElementDeclarationEmitInfo);
ts.writeFile(host, emitterDiagnostics, declarationFilePath, declarationOutput, host.getCompilerOptions().emitBOM, sourceFiles);
}
return emitSkipped;
function getDeclarationOutput(synchronousDeclarationOutput, moduleElementDeclarationEmitInfo) {
var appliedSyncOutputPos = 0;
var declarationOutput = "";
ts.forEach(moduleElementDeclarationEmitInfo, function (aliasEmitInfo) {
if (aliasEmitInfo.asynchronousOutput) {
declarationOutput += synchronousDeclarationOutput.substring(appliedSyncOutputPos, aliasEmitInfo.outputPos);
declarationOutput += getDeclarationOutput(aliasEmitInfo.asynchronousOutput, aliasEmitInfo.subModuleElementDeclarationEmitInfo);
appliedSyncOutputPos = aliasEmitInfo.outputPos;
}
});
declarationOutput += synchronousDeclarationOutput.substring(appliedSyncOutputPos);
return declarationOutput;
}
}
ts.writeDeclarationFile = writeDeclarationFile;
})(ts || (ts = {}));
var ts;
(function (ts) {
var delimiters = createDelimiterMap();
var brackets = createBracketsMap();
function forEachEmittedFile(host, action, sourceFilesOrTargetSourceFile, emitOnlyDtsFiles) {
var sourceFiles = ts.isArray(sourceFilesOrTargetSourceFile) ? sourceFilesOrTargetSourceFile : ts.getSourceFilesToEmit(host, sourceFilesOrTargetSourceFile);
var options = host.getCompilerOptions();
if (options.outFile || options.out) {
if (sourceFiles.length) {
var jsFilePath = options.outFile || options.out;
var sourceMapFilePath = getSourceMapFilePath(jsFilePath, options);
var declarationFilePath = options.declaration ? ts.removeFileExtension(jsFilePath) + ".d.ts" : "";
action({ jsFilePath: jsFilePath, sourceMapFilePath: sourceMapFilePath, declarationFilePath: declarationFilePath }, ts.createBundle(sourceFiles), emitOnlyDtsFiles);
}
}
else {
for (var _a = 0, sourceFiles_1 = sourceFiles; _a < sourceFiles_1.length; _a++) {
var sourceFile = sourceFiles_1[_a];
var jsFilePath = ts.getOwnEmitOutputFilePath(sourceFile, host, getOutputExtension(sourceFile, options));
var sourceMapFilePath = getSourceMapFilePath(jsFilePath, options);
var declarationFilePath = !ts.isSourceFileJavaScript(sourceFile) && (emitOnlyDtsFiles || options.declaration) ? ts.getDeclarationEmitOutputFilePath(sourceFile, host) : undefined;
action({ jsFilePath: jsFilePath, sourceMapFilePath: sourceMapFilePath, declarationFilePath: declarationFilePath }, sourceFile, emitOnlyDtsFiles);
}
}
}
ts.forEachEmittedFile = forEachEmittedFile;
function getSourceMapFilePath(jsFilePath, options) {
return options.sourceMap ? jsFilePath + ".map" : undefined;
}
function getOutputExtension(sourceFile, options) {
if (options.jsx === 1) {
if (ts.isSourceFileJavaScript(sourceFile)) {
if (ts.fileExtensionIs(sourceFile.fileName, ".jsx")) {
return ".jsx";
}
}
else if (sourceFile.languageVariant === 1) {
return ".jsx";
}
}
return ".js";
}
function getOriginalSourceFileOrBundle(sourceFileOrBundle) {
if (sourceFileOrBundle.kind === 266) {
return ts.updateBundle(sourceFileOrBundle, ts.sameMap(sourceFileOrBundle.sourceFiles, ts.getOriginalSourceFile));
}
return ts.getOriginalSourceFile(sourceFileOrBundle);
}
function emitFiles(resolver, host, targetSourceFile, emitOnlyDtsFiles, transformers) {
var compilerOptions = host.getCompilerOptions();
var moduleKind = ts.getEmitModuleKind(compilerOptions);
var sourceMapDataList = compilerOptions.sourceMap || compilerOptions.inlineSourceMap ? [] : undefined;
var emittedFilesList = compilerOptions.listEmittedFiles ? [] : undefined;
var emitterDiagnostics = ts.createDiagnosticCollection();
var newLine = host.getNewLine();
var writer = ts.createTextWriter(newLine);
var sourceMap = ts.createSourceMapWriter(host, writer);
var currentSourceFile;
var bundledHelpers;
var isOwnFileEmit;
var emitSkipped = false;
var sourceFiles = ts.getSourceFilesToEmit(host, targetSourceFile);
var transform = ts.transformNodes(resolver, host, compilerOptions, sourceFiles, transformers, false);
var printer = createPrinter(compilerOptions, {
hasGlobalName: resolver.hasGlobalName,
onEmitNode: transform.emitNodeWithNotification,
substituteNode: transform.substituteNode,
onEmitSourceMapOfNode: sourceMap.emitNodeWithSourceMap,
onEmitSourceMapOfToken: sourceMap.emitTokenWithSourceMap,
onEmitSourceMapOfPosition: sourceMap.emitPos,
onEmitHelpers: emitHelpers,
onSetSourceFile: setSourceFile,
});
ts.performance.mark("beforePrint");
forEachEmittedFile(host, emitSourceFileOrBundle, transform.transformed, emitOnlyDtsFiles);
ts.performance.measure("printTime", "beforePrint");
transform.dispose();
return {
emitSkipped: emitSkipped,
diagnostics: emitterDiagnostics.getDiagnostics(),
emittedFiles: emittedFilesList,
sourceMaps: sourceMapDataList
};
function emitSourceFileOrBundle(_a, sourceFileOrBundle) {
var jsFilePath = _a.jsFilePath, sourceMapFilePath = _a.sourceMapFilePath, declarationFilePath = _a.declarationFilePath;
if (!host.isEmitBlocked(jsFilePath) && !compilerOptions.noEmit) {
if (!emitOnlyDtsFiles) {
printSourceFileOrBundle(jsFilePath, sourceMapFilePath, sourceFileOrBundle);
}
}
else {
emitSkipped = true;
}
if (declarationFilePath) {
emitSkipped = ts.writeDeclarationFile(declarationFilePath, getOriginalSourceFileOrBundle(sourceFileOrBundle), host, resolver, emitterDiagnostics, emitOnlyDtsFiles) || emitSkipped;
}
if (!emitSkipped && emittedFilesList) {
if (!emitOnlyDtsFiles) {
emittedFilesList.push(jsFilePath);
}
if (sourceMapFilePath) {
emittedFilesList.push(sourceMapFilePath);
}
if (declarationFilePath) {
emittedFilesList.push(declarationFilePath);
}
}
}
function printSourceFileOrBundle(jsFilePath, sourceMapFilePath, sourceFileOrBundle) {
var bundle = sourceFileOrBundle.kind === 266 ? sourceFileOrBundle : undefined;
var sourceFile = sourceFileOrBundle.kind === 265 ? sourceFileOrBundle : undefined;
var sourceFiles = bundle ? bundle.sourceFiles : [sourceFile];
sourceMap.initialize(jsFilePath, sourceMapFilePath, sourceFileOrBundle);
if (bundle) {
bundledHelpers = ts.createMap();
isOwnFileEmit = false;
printer.writeBundle(bundle, writer);
}
else {
isOwnFileEmit = true;
printer.writeFile(sourceFile, writer);
}
writer.writeLine();
var sourceMappingURL = sourceMap.getSourceMappingURL();
if (sourceMappingURL) {
writer.write("//# " + "sourceMappingURL" + "=" + sourceMappingURL);
}
if (compilerOptions.sourceMap && !compilerOptions.inlineSourceMap) {
ts.writeFile(host, emitterDiagnostics, sourceMapFilePath, sourceMap.getText(), false, sourceFiles);
}
if (sourceMapDataList) {
sourceMapDataList.push(sourceMap.getSourceMapData());
}
ts.writeFile(host, emitterDiagnostics, jsFilePath, writer.getText(), compilerOptions.emitBOM, sourceFiles);
sourceMap.reset();
writer.reset();
currentSourceFile = undefined;
bundledHelpers = undefined;
isOwnFileEmit = false;
}
function setSourceFile(node) {
currentSourceFile = node;
sourceMap.setSourceFile(node);
}
function emitHelpers(node, writeLines) {
var helpersEmitted = false;
var bundle = node.kind === 266 ? node : undefined;
if (bundle && moduleKind === ts.ModuleKind.None) {
return;
}
var numNodes = bundle ? bundle.sourceFiles.length : 1;
for (var i = 0; i < numNodes; i++) {
var currentNode = bundle ? bundle.sourceFiles[i] : node;
var sourceFile = ts.isSourceFile(currentNode) ? currentNode : currentSourceFile;
var shouldSkip = compilerOptions.noEmitHelpers || ts.getExternalHelpersModuleName(sourceFile) !== undefined;
var shouldBundle = ts.isSourceFile(currentNode) && !isOwnFileEmit;
var helpers = ts.getEmitHelpers(currentNode);
if (helpers) {
for (var _a = 0, _b = ts.stableSort(helpers, ts.compareEmitHelpers); _a < _b.length; _a++) {
var helper = _b[_a];
if (!helper.scoped) {
if (shouldSkip)
continue;
if (shouldBundle) {
if (bundledHelpers.get(helper.name)) {
continue;
}
bundledHelpers.set(helper.name, true);
}
}
else if (bundle) {
continue;
}
writeLines(helper.text);
helpersEmitted = true;
}
}
}
return helpersEmitted;
}
}
ts.emitFiles = emitFiles;
function createPrinter(printerOptions, handlers) {
if (printerOptions === void 0) { printerOptions = {}; }
if (handlers === void 0) { handlers = {}; }
var hasGlobalName = handlers.hasGlobalName, onEmitSourceMapOfNode = handlers.onEmitSourceMapOfNode, onEmitSourceMapOfToken = handlers.onEmitSourceMapOfToken, onEmitSourceMapOfPosition = handlers.onEmitSourceMapOfPosition, onEmitNode = handlers.onEmitNode, onEmitHelpers = handlers.onEmitHelpers, onSetSourceFile = handlers.onSetSourceFile, substituteNode = handlers.substituteNode, onBeforeEmitNodeArray = handlers.onBeforeEmitNodeArray, onAfterEmitNodeArray = handlers.onAfterEmitNodeArray, onBeforeEmitToken = handlers.onBeforeEmitToken, onAfterEmitToken = handlers.onAfterEmitToken;
var newLine = ts.getNewLineCharacter(printerOptions);
var comments = ts.createCommentWriter(printerOptions, onEmitSourceMapOfPosition);
var emitNodeWithComments = comments.emitNodeWithComments, emitBodyWithDetachedComments = comments.emitBodyWithDetachedComments, emitTrailingCommentsOfPosition = comments.emitTrailingCommentsOfPosition, emitLeadingCommentsOfPosition = comments.emitLeadingCommentsOfPosition;
var currentSourceFile;
var nodeIdToGeneratedName;
var autoGeneratedIdToGeneratedName;
var generatedNames;
var tempFlagsStack;
var tempFlags;
var writer;
var ownWriter;
reset();
return {
printNode: printNode,
printFile: printFile,
printBundle: printBundle,
writeNode: writeNode,
writeFile: writeFile,
writeBundle: writeBundle
};
function printNode(hint, node, sourceFile) {
switch (hint) {
case 0:
ts.Debug.assert(ts.isSourceFile(node), "Expected a SourceFile node.");
break;
case 2:
ts.Debug.assert(ts.isIdentifier(node), "Expected an Identifier node.");
break;
case 1:
ts.Debug.assert(ts.isExpression(node), "Expected an Expression node.");
break;
}
switch (node.kind) {
case 265: return printFile(node);
case 266: return printBundle(node);
}
writeNode(hint, node, sourceFile, beginPrint());
return endPrint();
}
function printBundle(bundle) {
writeBundle(bundle, beginPrint());
return endPrint();
}
function printFile(sourceFile) {
writeFile(sourceFile, beginPrint());
return endPrint();
}
function writeNode(hint, node, sourceFile, output) {
var previousWriter = writer;
setWriter(output);
print(hint, node, sourceFile);
reset();
writer = previousWriter;
}
function writeBundle(bundle, output) {
var previousWriter = writer;
setWriter(output);
emitShebangIfNeeded(bundle);
emitPrologueDirectivesIfNeeded(bundle);
emitHelpersIndirect(bundle);
for (var _a = 0, _b = bundle.sourceFiles; _a < _b.length; _a++) {
var sourceFile = _b[_a];
print(0, sourceFile, sourceFile);
}
reset();
writer = previousWriter;
}
function writeFile(sourceFile, output) {
var previousWriter = writer;
setWriter(output);
emitShebangIfNeeded(sourceFile);
emitPrologueDirectivesIfNeeded(sourceFile);
print(0, sourceFile, sourceFile);
reset();
writer = previousWriter;
}
function beginPrint() {
return ownWriter || (ownWriter = ts.createTextWriter(newLine));
}
function endPrint() {
var text = ownWriter.getText();
ownWriter.reset();
return text;
}
function print(hint, node, sourceFile) {
if (sourceFile) {
setSourceFile(sourceFile);
}
pipelineEmitWithNotification(hint, node);
}
function setSourceFile(sourceFile) {
currentSourceFile = sourceFile;
comments.setSourceFile(sourceFile);
if (onSetSourceFile) {
onSetSourceFile(sourceFile);
}
}
function setWriter(output) {
writer = output;
comments.setWriter(output);
}
function reset() {
nodeIdToGeneratedName = [];
autoGeneratedIdToGeneratedName = [];
generatedNames = ts.createMap();
tempFlagsStack = [];
tempFlags = 0;
comments.reset();
setWriter(undefined);
}
function emitIfPresent(node) {
if (node) {
emit(node);
}
}
function emit(node) {
pipelineEmitWithNotification(4, node);
}
function emitIdentifierName(node) {
pipelineEmitWithNotification(2, node);
}
function emitExpression(node) {
pipelineEmitWithNotification(1, node);
}
function pipelineEmitWithNotification(hint, node) {
if (onEmitNode) {
onEmitNode(hint, node, pipelineEmitWithComments);
}
else {
pipelineEmitWithComments(hint, node);
}
}
function pipelineEmitWithComments(hint, node) {
node = trySubstituteNode(hint, node);
if (emitNodeWithComments && hint !== 0) {
emitNodeWithComments(hint, node, pipelineEmitWithSourceMap);
}
else {
pipelineEmitWithSourceMap(hint, node);
}
}
function pipelineEmitWithSourceMap(hint, node) {
if (onEmitSourceMapOfNode && hint !== 0 && hint !== 2) {
onEmitSourceMapOfNode(hint, node, pipelineEmitWithHint);
}
else {
pipelineEmitWithHint(hint, node);
}
}
function pipelineEmitWithHint(hint, node) {
switch (hint) {
case 0: return pipelineEmitSourceFile(node);
case 2: return pipelineEmitIdentifierName(node);
case 1: return pipelineEmitExpression(node);
case 3: return emitMappedTypeParameter(ts.cast(node, ts.isTypeParameterDeclaration));
case 4: return pipelineEmitUnspecified(node);
}
}
function pipelineEmitSourceFile(node) {
ts.Debug.assertNode(node, ts.isSourceFile);
emitSourceFile(node);
}
function pipelineEmitIdentifierName(node) {
ts.Debug.assertNode(node, ts.isIdentifier);
emitIdentifier(node);
}
function emitMappedTypeParameter(node) {
emit(node.name);
write(" in ");
emit(node.constraint);
}
function pipelineEmitUnspecified(node) {
var kind = node.kind;
if (ts.isKeyword(kind)) {
writeTokenNode(node);
return;
}
switch (kind) {
case 14:
case 15:
case 16:
return emitLiteral(node);
case 71:
return emitIdentifier(node);
case 143:
return emitQualifiedName(node);
case 144:
return emitComputedPropertyName(node);
case 145:
return emitTypeParameter(node);
case 146:
return emitParameter(node);
case 147:
return emitDecorator(node);
case 148:
return emitPropertySignature(node);
case 149:
return emitPropertyDeclaration(node);
case 150:
return emitMethodSignature(node);
case 151:
return emitMethodDeclaration(node);
case 152:
return emitConstructor(node);
case 153:
case 154:
return emitAccessorDeclaration(node);
case 155:
return emitCallSignature(node);
case 156:
return emitConstructSignature(node);
case 157:
return emitIndexSignature(node);
case 158:
return emitTypePredicate(node);
case 159:
return emitTypeReference(node);
case 160:
return emitFunctionType(node);
case 273:
return emitJSDocFunctionType(node);
case 161:
return emitConstructorType(node);
case 162:
return emitTypeQuery(node);
case 163:
return emitTypeLiteral(node);
case 164:
return emitArrayType(node);
case 165:
return emitTupleType(node);
case 166:
return emitUnionType(node);
case 167:
return emitIntersectionType(node);
case 168:
return emitParenthesizedType(node);
case 201:
return emitExpressionWithTypeArguments(node);
case 169:
return emitThisType();
case 170:
return emitTypeOperator(node);
case 171:
return emitIndexedAccessType(node);
case 172:
return emitMappedType(node);
case 173:
return emitLiteralType(node);
case 268:
write("*");
return;
case 269:
write("?");
return;
case 270:
return emitJSDocNullableType(node);
case 271:
return emitJSDocNonNullableType(node);
case 272:
return emitJSDocOptionalType(node);
case 274:
return emitJSDocVariadicType(node);
case 174:
return emitObjectBindingPattern(node);
case 175:
return emitArrayBindingPattern(node);
case 176:
return emitBindingElement(node);
case 205:
return emitTemplateSpan(node);
case 206:
return emitSemicolonClassElement();
case 207:
return emitBlock(node);
case 208:
return emitVariableStatement(node);
case 209:
return emitEmptyStatement();
case 210:
return emitExpressionStatement(node);
case 211:
return emitIfStatement(node);
case 212:
return emitDoStatement(node);
case 213:
return emitWhileStatement(node);
case 214:
return emitForStatement(node);
case 215:
return emitForInStatement(node);
case 216:
return emitForOfStatement(node);
case 217:
return emitContinueStatement(node);
case 218:
return emitBreakStatement(node);
case 219:
return emitReturnStatement(node);
case 220:
return emitWithStatement(node);
case 221:
return emitSwitchStatement(node);
case 222:
return emitLabeledStatement(node);
case 223:
return emitThrowStatement(node);
case 224:
return emitTryStatement(node);
case 225:
return emitDebuggerStatement(node);
case 226:
return emitVariableDeclaration(node);
case 227:
return emitVariableDeclarationList(node);
case 228:
return emitFunctionDeclaration(node);
case 229:
return emitClassDeclaration(node);
case 230:
return emitInterfaceDeclaration(node);
case 231:
return emitTypeAliasDeclaration(node);
case 232:
return emitEnumDeclaration(node);
case 233:
return emitModuleDeclaration(node);
case 234:
return emitModuleBlock(node);
case 235:
return emitCaseBlock(node);
case 236:
return emitNamespaceExportDeclaration(node);
case 237:
return emitImportEqualsDeclaration(node);
case 238:
return emitImportDeclaration(node);
case 239:
return emitImportClause(node);
case 240:
return emitNamespaceImport(node);
case 241:
return emitNamedImports(node);
case 242:
return emitImportSpecifier(node);
case 243:
return emitExportAssignment(node);
case 244:
return emitExportDeclaration(node);
case 245:
return emitNamedExports(node);
case 246:
return emitExportSpecifier(node);
case 247:
return;
case 248:
return emitExternalModuleReference(node);
case 10:
return emitJsxText(node);
case 251:
return emitJsxOpeningElement(node);
case 252:
return emitJsxClosingElement(node);
case 253:
return emitJsxAttribute(node);
case 254:
return emitJsxAttributes(node);
case 255:
return emitJsxSpreadAttribute(node);
case 256:
return emitJsxExpression(node);
case 257:
return emitCaseClause(node);
case 258:
return emitDefaultClause(node);
case 259:
return emitHeritageClause(node);
case 260:
return emitCatchClause(node);
case 261:
return emitPropertyAssignment(node);
case 262:
return emitShorthandPropertyAssignment(node);
case 263:
return emitSpreadAssignment(node);
case 264:
return emitEnumMember(node);
}
if (ts.isExpression(node)) {
return pipelineEmitExpression(trySubstituteNode(1, node));
}
if (ts.isToken(node)) {
writeTokenNode(node);
return;
}
}
function pipelineEmitExpression(node) {
var kind = node.kind;
switch (kind) {
case 8:
return emitNumericLiteral(node);
case 9:
case 12:
case 13:
return emitLiteral(node);
case 71:
return emitIdentifier(node);
case 86:
case 95:
case 97:
case 101:
case 99:
case 91:
writeTokenNode(node);
return;
case 177:
return emitArrayLiteralExpression(node);
case 178:
return emitObjectLiteralExpression(node);
case 179:
return emitPropertyAccessExpression(node);
case 180:
return emitElementAccessExpression(node);
case 181:
return emitCallExpression(node);
case 182:
return emitNewExpression(node);
case 183:
return emitTaggedTemplateExpression(node);
case 184:
return emitTypeAssertionExpression(node);
case 185:
return emitParenthesizedExpression(node);
case 186:
return emitFunctionExpression(node);
case 187:
return emitArrowFunction(node);
case 188:
return emitDeleteExpression(node);
case 189:
return emitTypeOfExpression(node);
case 190:
return emitVoidExpression(node);
case 191:
return emitAwaitExpression(node);
case 192:
return emitPrefixUnaryExpression(node);
case 193:
return emitPostfixUnaryExpression(node);
case 194:
return emitBinaryExpression(node);
case 195:
return emitConditionalExpression(node);
case 196:
return emitTemplateExpression(node);
case 197:
return emitYieldExpression(node);
case 198:
return emitSpreadExpression(node);
case 199:
return emitClassExpression(node);
case 200:
return;
case 202:
return emitAsExpression(node);
case 203:
return emitNonNullExpression(node);
case 204:
return emitMetaProperty(node);
case 249:
return emitJsxElement(node);
case 250:
return emitJsxSelfClosingElement(node);
case 288:
return emitPartiallyEmittedExpression(node);
case 289:
return emitCommaList(node);
}
}
function trySubstituteNode(hint, node) {
return node && substituteNode && substituteNode(hint, node) || node;
}
function emitHelpersIndirect(node) {
if (onEmitHelpers) {
onEmitHelpers(node, writeLines);
}
}
function emitNumericLiteral(node) {
emitLiteral(node);
}
function emitLiteral(node) {
var text = getLiteralTextOfNode(node);
if ((printerOptions.sourceMap || printerOptions.inlineSourceMap)
&& (node.kind === 9 || ts.isTemplateLiteralKind(node.kind))) {
writer.writeLiteral(text);
}
else {
write(text);
}
}
function emitIdentifier(node) {
write(getTextOfNode(node, false));
emitTypeArguments(node, node.typeArguments);
}
function emitQualifiedName(node) {
emitEntityName(node.left);
write(".");
emit(node.right);
}
function emitEntityName(node) {
if (node.kind === 71) {
emitExpression(node);
}
else {
emit(node);
}
}
function emitComputedPropertyName(node) {
write("[");
emitExpression(node.expression);
write("]");
}
function emitTypeParameter(node) {
emit(node.name);
emitWithPrefix(" extends ", node.constraint);
emitWithPrefix(" = ", node.default);
}
function emitParameter(node) {
emitDecorators(node, node.decorators);
emitModifiers(node, node.modifiers);
emitIfPresent(node.dotDotDotToken);
if (node.name) {
emit(node.name);
}
emitIfPresent(node.questionToken);
if (node.parent && node.parent.kind === 273 && !node.name) {
emit(node.type);
}
else {
emitWithPrefix(": ", node.type);
}
emitExpressionWithPrefix(" = ", node.initializer);
}
function emitDecorator(decorator) {
write("@");
emitExpression(decorator.expression);
}
function emitPropertySignature(node) {
emitDecorators(node, node.decorators);
emitModifiers(node, node.modifiers);
emit(node.name);
emitIfPresent(node.questionToken);
emitWithPrefix(": ", node.type);
write(";");
}
function emitPropertyDeclaration(node) {
emitDecorators(node, node.decorators);
emitModifiers(node, node.modifiers);
emit(node.name);
emitIfPresent(node.questionToken);
emitWithPrefix(": ", node.type);
emitExpressionWithPrefix(" = ", node.initializer);
write(";");
}
function emitMethodSignature(node) {
emitDecorators(node, node.decorators);
emitModifiers(node, node.modifiers);
emit(node.name);
emitIfPresent(node.questionToken);
emitTypeParameters(node, node.typeParameters);
emitParameters(node, node.parameters);
emitWithPrefix(": ", node.type);
write(";");
}
function emitMethodDeclaration(node) {
emitDecorators(node, node.decorators);
emitModifiers(node, node.modifiers);
emitIfPresent(node.asteriskToken);
emit(node.name);
emitIfPresent(node.questionToken);
emitSignatureAndBody(node, emitSignatureHead);
}
function emitConstructor(node) {
emitModifiers(node, node.modifiers);
write("constructor");
emitSignatureAndBody(node, emitSignatureHead);
}
function emitAccessorDeclaration(node) {
emitDecorators(node, node.decorators);
emitModifiers(node, node.modifiers);
write(node.kind === 153 ? "get " : "set ");
emit(node.name);
emitSignatureAndBody(node, emitSignatureHead);
}
function emitCallSignature(node) {
emitDecorators(node, node.decorators);
emitModifiers(node, node.modifiers);
emitTypeParameters(node, node.typeParameters);
emitParameters(node, node.parameters);
emitWithPrefix(": ", node.type);
write(";");
}
function emitConstructSignature(node) {
emitDecorators(node, node.decorators);
emitModifiers(node, node.modifiers);
write("new ");
emitTypeParameters(node, node.typeParameters);
emitParameters(node, node.parameters);
emitWithPrefix(": ", node.type);
write(";");
}
function emitIndexSignature(node) {
emitDecorators(node, node.decorators);
emitModifiers(node, node.modifiers);
emitParametersForIndexSignature(node, node.parameters);
emitWithPrefix(": ", node.type);
write(";");
}
function emitSemicolonClassElement() {
write(";");
}
function emitTypePredicate(node) {
emit(node.parameterName);
write(" is ");
emit(node.type);
}
function emitTypeReference(node) {
emit(node.typeName);
emitTypeArguments(node, node.typeArguments);
}
function emitFunctionType(node) {
emitTypeParameters(node, node.typeParameters);
emitParametersForArrow(node, node.parameters);
write(" => ");
emit(node.type);
}
function emitJSDocFunctionType(node) {
write("function");
emitParameters(node, node.parameters);
write(":");
emit(node.type);
}
function emitJSDocNullableType(node) {
write("?");
emit(node.type);
}
function emitJSDocNonNullableType(node) {
write("!");
emit(node.type);
}
function emitJSDocOptionalType(node) {
emit(node.type);
write("=");
}
function emitConstructorType(node) {
write("new ");
emitTypeParameters(node, node.typeParameters);
emitParameters(node, node.parameters);
write(" => ");
emit(node.type);
}
function emitTypeQuery(node) {
write("typeof ");
emit(node.exprName);
}
function emitTypeLiteral(node) {
write("{");
var flags = ts.getEmitFlags(node) & 1 ? 448 : 65;
emitList(node, node.members, flags | 262144);
write("}");
}
function emitArrayType(node) {
emit(node.elementType);
write("[]");
}
function emitJSDocVariadicType(node) {
write("...");
emit(node.type);
}
function emitTupleType(node) {
write("[");
emitList(node, node.elementTypes, 336);
write("]");
}
function emitUnionType(node) {
emitList(node, node.types, 260);
}
function emitIntersectionType(node) {
emitList(node, node.types, 264);
}
function emitParenthesizedType(node) {
write("(");
emit(node.type);
write(")");
}
function emitThisType() {
write("this");
}
function emitTypeOperator(node) {
writeTokenText(node.operator);
write(" ");
emit(node.type);
}
function emitIndexedAccessType(node) {
emit(node.objectType);
write("[");
emit(node.indexType);
write("]");
}
function emitMappedType(node) {
var emitFlags = ts.getEmitFlags(node);
write("{");
if (emitFlags & 1) {
write(" ");
}
else {
writeLine();
increaseIndent();
}
if (node.readonlyToken) {
emit(node.readonlyToken);
write(" ");
}
write("[");
pipelineEmitWithNotification(3, node.typeParameter);
write("]");
emitIfPresent(node.questionToken);
write(": ");
emit(node.type);
write(";");
if (emitFlags & 1) {
write(" ");
}
else {
writeLine();
decreaseIndent();
}
write("}");
}
function emitLiteralType(node) {
emitExpression(node.literal);
}
function emitObjectBindingPattern(node) {
var elements = node.elements;
if (elements.length === 0) {
write("{}");
}
else {
write("{");
emitList(node, elements, 432);
write("}");
}
}
function emitArrayBindingPattern(node) {
var elements = node.elements;
if (elements.length === 0) {
write("[]");
}
else {
write("[");
emitList(node, node.elements, 304);
write("]");
}
}
function emitBindingElement(node) {
emitWithSuffix(node.propertyName, ": ");
emitIfPresent(node.dotDotDotToken);
emit(node.name);
emitExpressionWithPrefix(" = ", node.initializer);
}
function emitArrayLiteralExpression(node) {
var elements = node.elements;
var preferNewLine = node.multiLine ? 32768 : 0;
emitExpressionList(node, elements, 4466 | preferNewLine);
}
function emitObjectLiteralExpression(node) {
var indentedFlag = ts.getEmitFlags(node) & 65536;
if (indentedFlag) {
increaseIndent();
}
var preferNewLine = node.multiLine ? 32768 : 0;
var allowTrailingComma = currentSourceFile.languageVersion >= 1 ? 32 : 0;
emitList(node, node.properties, 263122 | allowTrailingComma | preferNewLine);
if (indentedFlag) {
decreaseIndent();
}
}
function emitPropertyAccessExpression(node) {
var indentBeforeDot = false;
var indentAfterDot = false;
if (!(ts.getEmitFlags(node) & 131072)) {
var dotRangeStart = node.expression.end;
var dotRangeEnd = ts.skipTrivia(currentSourceFile.text, node.expression.end) + 1;
var dotToken = ts.createToken(23);
dotToken.pos = dotRangeStart;
dotToken.end = dotRangeEnd;
indentBeforeDot = needsIndentation(node, node.expression, dotToken);
indentAfterDot = needsIndentation(node, dotToken, node.name);
}
emitExpression(node.expression);
increaseIndentIf(indentBeforeDot);
var shouldEmitDotDot = !indentBeforeDot && needsDotDotForPropertyAccess(node.expression);
write(shouldEmitDotDot ? ".." : ".");
increaseIndentIf(indentAfterDot);
emit(node.name);
decreaseIndentIf(indentBeforeDot, indentAfterDot);
}
function needsDotDotForPropertyAccess(expression) {
expression = ts.skipPartiallyEmittedExpressions(expression);
if (ts.isNumericLiteral(expression)) {
var text = getLiteralTextOfNode(expression);
return !expression.numericLiteralFlags
&& !ts.stringContains(text, ts.tokenToString(23));
}
else if (ts.isPropertyAccessExpression(expression) || ts.isElementAccessExpression(expression)) {
var constantValue = ts.getConstantValue(expression);
return typeof constantValue === "number" && isFinite(constantValue)
&& Math.floor(constantValue) === constantValue
&& printerOptions.removeComments;
}
}
function emitElementAccessExpression(node) {
emitExpression(node.expression);
write("[");
emitExpression(node.argumentExpression);
write("]");
}
function emitCallExpression(node) {
emitExpression(node.expression);
emitTypeArguments(node, node.typeArguments);
emitExpressionList(node, node.arguments, 1296);
}
function emitNewExpression(node) {
write("new ");
emitExpression(node.expression);
emitTypeArguments(node, node.typeArguments);
emitExpressionList(node, node.arguments, 9488);
}
function emitTaggedTemplateExpression(node) {
emitExpression(node.tag);
write(" ");
emitExpression(node.template);
}
function emitTypeAssertionExpression(node) {
write("<");
emit(node.type);
write(">");
emitExpression(node.expression);
}
function emitParenthesizedExpression(node) {
write("(");
emitExpression(node.expression);
write(")");
}
function emitFunctionExpression(node) {
emitFunctionDeclarationOrExpression(node);
}
function emitArrowFunction(node) {
emitDecorators(node, node.decorators);
emitModifiers(node, node.modifiers);
emitSignatureAndBody(node, emitArrowFunctionHead);
}
function emitArrowFunctionHead(node) {
emitTypeParameters(node, node.typeParameters);
emitParametersForArrow(node, node.parameters);
emitWithPrefix(": ", node.type);
write(" ");
emit(node.equalsGreaterThanToken);
}
function emitDeleteExpression(node) {
write("delete ");
emitExpression(node.expression);
}
function emitTypeOfExpression(node) {
write("typeof ");
emitExpression(node.expression);
}
function emitVoidExpression(node) {
write("void ");
emitExpression(node.expression);
}
function emitAwaitExpression(node) {
write("await ");
emitExpression(node.expression);
}
function emitPrefixUnaryExpression(node) {
writeTokenText(node.operator);
if (shouldEmitWhitespaceBeforeOperand(node)) {
write(" ");
}
emitExpression(node.operand);
}
function shouldEmitWhitespaceBeforeOperand(node) {
var operand = node.operand;
return operand.kind === 192
&& ((node.operator === 37 && (operand.operator === 37 || operand.operator === 43))
|| (node.operator === 38 && (operand.operator === 38 || operand.operator === 44)));
}
function emitPostfixUnaryExpression(node) {
emitExpression(node.operand);
writeTokenText(node.operator);
}
function emitBinaryExpression(node) {
var isCommaOperator = node.operatorToken.kind !== 26;
var indentBeforeOperator = needsIndentation(node, node.left, node.operatorToken);
var indentAfterOperator = needsIndentation(node, node.operatorToken, node.right);
emitExpression(node.left);
increaseIndentIf(indentBeforeOperator, isCommaOperator ? " " : undefined);
emitLeadingCommentsOfPosition(node.operatorToken.pos);
writeTokenNode(node.operatorToken);
emitTrailingCommentsOfPosition(node.operatorToken.end, true);
increaseIndentIf(indentAfterOperator, " ");
emitExpression(node.right);
decreaseIndentIf(indentBeforeOperator, indentAfterOperator);
}
function emitConditionalExpression(node) {
var indentBeforeQuestion = needsIndentation(node, node.condition, node.questionToken);
var indentAfterQuestion = needsIndentation(node, node.questionToken, node.whenTrue);
var indentBeforeColon = needsIndentation(node, node.whenTrue, node.colonToken);
var indentAfterColon = needsIndentation(node, node.colonToken, node.whenFalse);
emitExpression(node.condition);
increaseIndentIf(indentBeforeQuestion, " ");
emit(node.questionToken);
increaseIndentIf(indentAfterQuestion, " ");
emitExpression(node.whenTrue);
decreaseIndentIf(indentBeforeQuestion, indentAfterQuestion);
increaseIndentIf(indentBeforeColon, " ");
emit(node.colonToken);
increaseIndentIf(indentAfterColon, " ");
emitExpression(node.whenFalse);
decreaseIndentIf(indentBeforeColon, indentAfterColon);
}
function emitTemplateExpression(node) {
emit(node.head);
emitList(node, node.templateSpans, 131072);
}
function emitYieldExpression(node) {
write("yield");
emit(node.asteriskToken);
emitExpressionWithPrefix(" ", node.expression);
}
function emitSpreadExpression(node) {
write("...");
emitExpression(node.expression);
}
function emitClassExpression(node) {
emitClassDeclarationOrExpression(node);
}
function emitExpressionWithTypeArguments(node) {
emitExpression(node.expression);
emitTypeArguments(node, node.typeArguments);
}
function emitAsExpression(node) {
emitExpression(node.expression);
if (node.type) {
write(" as ");
emit(node.type);
}
}
function emitNonNullExpression(node) {
emitExpression(node.expression);
write("!");
}
function emitMetaProperty(node) {
writeToken(node.keywordToken, node.pos);
write(".");
emit(node.name);
}
function emitTemplateSpan(node) {
emitExpression(node.expression);
emit(node.literal);
}
function emitBlock(node) {
writeToken(17, node.pos, node);
emitBlockStatements(node, !node.multiLine && isEmptyBlock(node));
increaseIndent();
emitLeadingCommentsOfPosition(node.statements.end);
decreaseIndent();
writeToken(18, node.statements.end, node);
}
function emitBlockStatements(node, forceSingleLine) {
var format = forceSingleLine || ts.getEmitFlags(node) & 1 ? 384 : 65;
emitList(node, node.statements, format);
}
function emitVariableStatement(node) {
emitModifiers(node, node.modifiers);
emit(node.declarationList);
write(";");
}
function emitEmptyStatement() {
write(";");
}
function emitExpressionStatement(node) {
emitExpression(node.expression);
write(";");
}
function emitIfStatement(node) {
var openParenPos = writeToken(90, node.pos, node);
write(" ");
writeToken(19, openParenPos, node);
emitExpression(node.expression);
writeToken(20, node.expression.end, node);
emitEmbeddedStatement(node, node.thenStatement);
if (node.elseStatement) {
writeLineOrSpace(node);
writeToken(82, node.thenStatement.end, node);
if (node.elseStatement.kind === 211) {
write(" ");
emit(node.elseStatement);
}
else {
emitEmbeddedStatement(node, node.elseStatement);
}
}
}
function emitDoStatement(node) {
write("do");
emitEmbeddedStatement(node, node.statement);
if (ts.isBlock(node.statement)) {
write(" ");
}
else {
writeLineOrSpace(node);
}
write("while (");
emitExpression(node.expression);
write(");");
}
function emitWhileStatement(node) {
write("while (");
emitExpression(node.expression);
write(")");
emitEmbeddedStatement(node, node.statement);
}
function emitForStatement(node) {
var openParenPos = writeToken(88, node.pos);
write(" ");
writeToken(19, openParenPos, node);
emitForBinding(node.initializer);
write(";");
emitExpressionWithPrefix(" ", node.condition);
write(";");
emitExpressionWithPrefix(" ", node.incrementor);
write(")");
emitEmbeddedStatement(node, node.statement);
}
function emitForInStatement(node) {
var openParenPos = writeToken(88, node.pos);
write(" ");
writeToken(19, openParenPos);
emitForBinding(node.initializer);
write(" in ");
emitExpression(node.expression);
writeToken(20, node.expression.end);
emitEmbeddedStatement(node, node.statement);
}
function emitForOfStatement(node) {
var openParenPos = writeToken(88, node.pos);
write(" ");
emitWithSuffix(node.awaitModifier, " ");
writeToken(19, openParenPos);
emitForBinding(node.initializer);
write(" of ");
emitExpression(node.expression);
writeToken(20, node.expression.end);
emitEmbeddedStatement(node, node.statement);
}
function emitForBinding(node) {
if (node !== undefined) {
if (node.kind === 227) {
emit(node);
}
else {
emitExpression(node);
}
}
}
function emitContinueStatement(node) {
writeToken(77, node.pos);
emitWithPrefix(" ", node.label);
write(";");
}
function emitBreakStatement(node) {
writeToken(72, node.pos);
emitWithPrefix(" ", node.label);
write(";");
}
function emitTokenWithComment(token, pos, contextNode) {
var node = contextNode && ts.getParseTreeNode(contextNode);
if (node && node.kind === contextNode.kind) {
pos = ts.skipTrivia(currentSourceFile.text, pos);
}
pos = writeToken(token, pos, contextNode);
if (node && node.kind === contextNode.kind) {
emitTrailingCommentsOfPosition(pos, true);
}
return pos;
}
function emitReturnStatement(node) {
emitTokenWithComment(96, node.pos, node);
emitExpressionWithPrefix(" ", node.expression);
write(";");
}
function emitWithStatement(node) {
write("with (");
emitExpression(node.expression);
write(")");
emitEmbeddedStatement(node, node.statement);
}
function emitSwitchStatement(node) {
var openParenPos = writeToken(98, node.pos);
write(" ");
writeToken(19, openParenPos);
emitExpression(node.expression);
writeToken(20, node.expression.end);
write(" ");
emit(node.caseBlock);
}
function emitLabeledStatement(node) {
emit(node.label);
write(": ");
emit(node.statement);
}
function emitThrowStatement(node) {
write("throw");
emitExpressionWithPrefix(" ", node.expression);
write(";");
}
function emitTryStatement(node) {
write("try ");
emit(node.tryBlock);
if (node.catchClause) {
writeLineOrSpace(node);
emit(node.catchClause);
}
if (node.finallyBlock) {
writeLineOrSpace(node);
write("finally ");
emit(node.finallyBlock);
}
}
function emitDebuggerStatement(node) {
writeToken(78, node.pos);
write(";");
}
function emitVariableDeclaration(node) {
emit(node.name);
emitWithPrefix(": ", node.type);
emitExpressionWithPrefix(" = ", node.initializer);
}
function emitVariableDeclarationList(node) {
write(ts.isLet(node) ? "let " : ts.isConst(node) ? "const " : "var ");
emitList(node, node.declarations, 272);
}
function emitFunctionDeclaration(node) {
emitFunctionDeclarationOrExpression(node);
}
function emitFunctionDeclarationOrExpression(node) {
emitDecorators(node, node.decorators);
emitModifiers(node, node.modifiers);
write("function");
emitIfPresent(node.asteriskToken);
write(" ");
emitIdentifierName(node.name);
emitSignatureAndBody(node, emitSignatureHead);
}
function emitBlockCallback(_hint, body) {
emitBlockFunctionBody(body);
}
function emitSignatureAndBody(node, emitSignatureHead) {
var body = node.body;
if (body) {
if (ts.isBlock(body)) {
var indentedFlag = ts.getEmitFlags(node) & 65536;
if (indentedFlag) {
increaseIndent();
}
if (ts.getEmitFlags(node) & 524288) {
emitSignatureHead(node);
if (onEmitNode) {
onEmitNode(4, body, emitBlockCallback);
}
else {
emitBlockFunctionBody(body);
}
}
else {
pushNameGenerationScope();
emitSignatureHead(node);
if (onEmitNode) {
onEmitNode(4, body, emitBlockCallback);
}
else {
emitBlockFunctionBody(body);
}
popNameGenerationScope();
}
if (indentedFlag) {
decreaseIndent();
}
}
else {
emitSignatureHead(node);
write(" ");
emitExpression(body);
}
}
else {
emitSignatureHead(node);
write(";");
}
}
function emitSignatureHead(node) {
emitTypeParameters(node, node.typeParameters);
emitParameters(node, node.parameters);
emitWithPrefix(": ", node.type);
}
function shouldEmitBlockFunctionBodyOnSingleLine(body) {
if (ts.getEmitFlags(body) & 1) {
return true;
}
if (body.multiLine) {
return false;
}
if (!ts.nodeIsSynthesized(body) && !ts.rangeIsOnSingleLine(body, currentSourceFile)) {
return false;
}
if (shouldWriteLeadingLineTerminator(body, body.statements, 2)
|| shouldWriteClosingLineTerminator(body, body.statements, 2)) {
return false;
}
var previousStatement;
for (var _a = 0, _b = body.statements; _a < _b.length; _a++) {
var statement = _b[_a];
if (shouldWriteSeparatingLineTerminator(previousStatement, statement, 2)) {
return false;
}
previousStatement = statement;
}
return true;
}
function emitBlockFunctionBody(body) {
write(" {");
increaseIndent();
var emitBlockFunctionBody = shouldEmitBlockFunctionBodyOnSingleLine(body)
? emitBlockFunctionBodyOnSingleLine
: emitBlockFunctionBodyWorker;
if (emitBodyWithDetachedComments) {
emitBodyWithDetachedComments(body, body.statements, emitBlockFunctionBody);
}
else {
emitBlockFunctionBody(body);
}
decreaseIndent();
writeToken(18, body.statements.end, body);
}
function emitBlockFunctionBodyOnSingleLine(body) {
emitBlockFunctionBodyWorker(body, true);
}
function emitBlockFunctionBodyWorker(body, emitBlockFunctionBodyOnSingleLine) {
var statementOffset = emitPrologueDirectives(body.statements, true);
var pos = writer.getTextPos();
emitHelpersIndirect(body);
if (statementOffset === 0 && pos === writer.getTextPos() && emitBlockFunctionBodyOnSingleLine) {
decreaseIndent();
emitList(body, body.statements, 384);
increaseIndent();
}
else {
emitList(body, body.statements, 1, statementOffset);
}
}
function emitClassDeclaration(node) {
emitClassDeclarationOrExpression(node);
}
function emitClassDeclarationOrExpression(node) {
emitDecorators(node, node.decorators);
emitModifiers(node, node.modifiers);
write("class");
emitNodeWithPrefix(" ", node.name, emitIdentifierName);
var indentedFlag = ts.getEmitFlags(node) & 65536;
if (indentedFlag) {
increaseIndent();
}
emitTypeParameters(node, node.typeParameters);
emitList(node, node.heritageClauses, 256);
pushNameGenerationScope();
write(" {");
emitList(node, node.members, 65);
write("}");
popNameGenerationScope();
if (indentedFlag) {
decreaseIndent();
}
}
function emitInterfaceDeclaration(node) {
emitDecorators(node, node.decorators);
emitModifiers(node, node.modifiers);
write("interface ");
emit(node.name);
emitTypeParameters(node, node.typeParameters);
emitList(node, node.heritageClauses, 256);
write(" {");
emitList(node, node.members, 65);
write("}");
}
function emitTypeAliasDeclaration(node) {
emitDecorators(node, node.decorators);
emitModifiers(node, node.modifiers);
write("type ");
emit(node.name);
emitTypeParameters(node, node.typeParameters);
write(" = ");
emit(node.type);
write(";");
}
function emitEnumDeclaration(node) {
emitModifiers(node, node.modifiers);
write("enum ");
emit(node.name);
pushNameGenerationScope();
write(" {");
emitList(node, node.members, 81);
write("}");
popNameGenerationScope();
}
function emitModuleDeclaration(node) {
emitModifiers(node, node.modifiers);
if (~node.flags & 512) {
write(node.flags & 16 ? "namespace " : "module ");
}
emit(node.name);
var body = node.body;
while (body.kind === 233) {
write(".");
emit(body.name);
body = body.body;
}
write(" ");
emit(body);
}
function emitModuleBlock(node) {
pushNameGenerationScope();
write("{");
emitBlockStatements(node, isEmptyBlock(node));
write("}");
popNameGenerationScope();
}
function emitCaseBlock(node) {
writeToken(17, node.pos);
emitList(node, node.clauses, 65);
writeToken(18, node.clauses.end);
}
function emitImportEqualsDeclaration(node) {
emitModifiers(node, node.modifiers);
write("import ");
emit(node.name);
write(" = ");
emitModuleReference(node.moduleReference);
write(";");
}
function emitModuleReference(node) {
if (node.kind === 71) {
emitExpression(node);
}
else {
emit(node);
}
}
function emitImportDeclaration(node) {
emitModifiers(node, node.modifiers);
write("import ");
if (node.importClause) {
emit(node.importClause);
write(" from ");
}
emitExpression(node.moduleSpecifier);
write(";");
}
function emitImportClause(node) {
emit(node.name);
if (node.name && node.namedBindings) {
write(", ");
}
emit(node.namedBindings);
}
function emitNamespaceImport(node) {
write("* as ");
emit(node.name);
}
function emitNamedImports(node) {
emitNamedImportsOrExports(node);
}
function emitImportSpecifier(node) {
emitImportOrExportSpecifier(node);
}
function emitExportAssignment(node) {
write(node.isExportEquals ? "export = " : "export default ");
emitExpression(node.expression);
write(";");
}
function emitExportDeclaration(node) {
write("export ");
if (node.exportClause) {
emit(node.exportClause);
}
else {
write("*");
}
if (node.moduleSpecifier) {
write(" from ");
emitExpression(node.moduleSpecifier);
}
write(";");
}
function emitNamespaceExportDeclaration(node) {
write("export as namespace ");
emit(node.name);
write(";");
}
function emitNamedExports(node) {
emitNamedImportsOrExports(node);
}
function emitExportSpecifier(node) {
emitImportOrExportSpecifier(node);
}
function emitNamedImportsOrExports(node) {
write("{");
emitList(node, node.elements, 432);
write("}");
}
function emitImportOrExportSpecifier(node) {
if (node.propertyName) {
emit(node.propertyName);
write(" as ");
}
emit(node.name);
}
function emitExternalModuleReference(node) {
write("require(");
emitExpression(node.expression);
write(")");
}
function emitJsxElement(node) {
emit(node.openingElement);
emitList(node, node.children, 131072);
emit(node.closingElement);
}
function emitJsxSelfClosingElement(node) {
write("<");
emitJsxTagName(node.tagName);
write(" ");
if (node.attributes.properties && node.attributes.properties.length > 0) {
emit(node.attributes);
}
write("/>");
}
function emitJsxOpeningElement(node) {
write("<");
emitJsxTagName(node.tagName);
writeIfAny(node.attributes.properties, " ");
if (node.attributes.properties && node.attributes.properties.length > 0) {
emit(node.attributes);
}
write(">");
}
function emitJsxText(node) {
writer.writeLiteral(getTextOfNode(node, true));
}
function emitJsxClosingElement(node) {
write("</");
emitJsxTagName(node.tagName);
write(">");
}
function emitJsxAttributes(node) {
emitList(node, node.properties, 131328);
}
function emitJsxAttribute(node) {
emit(node.name);
emitWithPrefix("=", node.initializer);
}
function emitJsxSpreadAttribute(node) {
write("{...");
emitExpression(node.expression);
write("}");
}
function emitJsxExpression(node) {
if (node.expression) {
write("{");
emitIfPresent(node.dotDotDotToken);
emitExpression(node.expression);
write("}");
}
}
function emitJsxTagName(node) {
if (node.kind === 71) {
emitExpression(node);
}
else {
emit(node);
}
}
function emitCaseClause(node) {
write("case ");
emitExpression(node.expression);
write(":");
emitCaseOrDefaultClauseStatements(node, node.statements);
}
function emitDefaultClause(node) {
write("default:");
emitCaseOrDefaultClauseStatements(node, node.statements);
}
function emitCaseOrDefaultClauseStatements(parentNode, statements) {
var emitAsSingleStatement = statements.length === 1 &&
(ts.nodeIsSynthesized(parentNode) ||
ts.nodeIsSynthesized(statements[0]) ||
ts.rangeStartPositionsAreOnSameLine(parentNode, statements[0], currentSourceFile));
if (statements.length > 0) {
emitTrailingCommentsOfPosition(statements.pos);
}
var format = 81985;
if (emitAsSingleStatement) {
write(" ");
format &= ~(1 | 64);
}
emitList(parentNode, statements, format);
}
function emitHeritageClause(node) {
write(" ");
writeTokenText(node.token);
write(" ");
emitList(node, node.types, 272);
}
function emitCatchClause(node) {
var openParenPos = writeToken(74, node.pos);
write(" ");
if (node.variableDeclaration) {
writeToken(19, openParenPos);
emit(node.variableDeclaration);
writeToken(20, node.variableDeclaration.end);
write(" ");
}
emit(node.block);
}
function emitPropertyAssignment(node) {
emit(node.name);
write(": ");
var initializer = node.initializer;
if (emitTrailingCommentsOfPosition && (ts.getEmitFlags(initializer) & 512) === 0) {
var commentRange = ts.getCommentRange(initializer);
emitTrailingCommentsOfPosition(commentRange.pos);
}
emitExpression(initializer);
}
function emitShorthandPropertyAssignment(node) {
emit(node.name);
if (node.objectAssignmentInitializer) {
write(" = ");
emitExpression(node.objectAssignmentInitializer);
}
}
function emitSpreadAssignment(node) {
if (node.expression) {
write("...");
emitExpression(node.expression);
}
}
function emitEnumMember(node) {
emit(node.name);
emitExpressionWithPrefix(" = ", node.initializer);
}
function emitSourceFile(node) {
writeLine();
var statements = node.statements;
if (emitBodyWithDetachedComments) {
var shouldEmitDetachedComment = statements.length === 0 ||
!ts.isPrologueDirective(statements[0]) ||
ts.nodeIsSynthesized(statements[0]);
if (shouldEmitDetachedComment) {
emitBodyWithDetachedComments(node, statements, emitSourceFileWorker);
return;
}
}
emitSourceFileWorker(node);
}
function emitSourceFileWorker(node) {
var statements = node.statements;
pushNameGenerationScope();
emitHelpersIndirect(node);
var index = ts.findIndex(statements, function (statement) { return !ts.isPrologueDirective(statement); });
emitList(node, statements, 1, index === -1 ? statements.length : index);
popNameGenerationScope();
}
function emitPartiallyEmittedExpression(node) {
emitExpression(node.expression);
}
function emitCommaList(node) {
emitExpressionList(node, node.elements, 272);
}
function emitPrologueDirectives(statements, startWithNewLine, seenPrologueDirectives) {
for (var i = 0; i < statements.length; i++) {
var statement = statements[i];
if (ts.isPrologueDirective(statement)) {
var shouldEmitPrologueDirective = seenPrologueDirectives ? !seenPrologueDirectives.has(statement.expression.text) : true;
if (shouldEmitPrologueDirective) {
if (startWithNewLine || i > 0) {
writeLine();
}
emit(statement);
if (seenPrologueDirectives) {
seenPrologueDirectives.set(statement.expression.text, true);
}
}
}
else {
return i;
}
}
return statements.length;
}
function emitPrologueDirectivesIfNeeded(sourceFileOrBundle) {
if (ts.isSourceFile(sourceFileOrBundle)) {
setSourceFile(sourceFileOrBundle);
emitPrologueDirectives(sourceFileOrBundle.statements);
}
else {
var seenPrologueDirectives = ts.createMap();
for (var _a = 0, _b = sourceFileOrBundle.sourceFiles; _a < _b.length; _a++) {
var sourceFile = _b[_a];
setSourceFile(sourceFile);
emitPrologueDirectives(sourceFile.statements, true, seenPrologueDirectives);
}
}
}
function emitShebangIfNeeded(sourceFileOrBundle) {
if (ts.isSourceFile(sourceFileOrBundle)) {
var shebang = ts.getShebang(sourceFileOrBundle.text);
if (shebang) {
write(shebang);
writeLine();
return true;
}
}
else {
for (var _a = 0, _b = sourceFileOrBundle.sourceFiles; _a < _b.length; _a++) {
var sourceFile = _b[_a];
if (emitShebangIfNeeded(sourceFile)) {
break;
}
}
}
}
function emitModifiers(node, modifiers) {
if (modifiers && modifiers.length) {
emitList(node, modifiers, 131328);
write(" ");
}
}
function emitWithPrefix(prefix, node) {
emitNodeWithPrefix(prefix, node, emit);
}
function emitExpressionWithPrefix(prefix, node) {
emitNodeWithPrefix(prefix, node, emitExpression);
}
function emitNodeWithPrefix(prefix, node, emit) {
if (node) {
write(prefix);
emit(node);
}
}
function emitWithSuffix(node, suffix) {
if (node) {
emit(node);
write(suffix);
}
}
function emitEmbeddedStatement(parent, node) {
if (ts.isBlock(node) || ts.getEmitFlags(parent) & 1) {
write(" ");
emit(node);
}
else {
writeLine();
increaseIndent();
emit(node);
decreaseIndent();
}
}
function emitDecorators(parentNode, decorators) {
emitList(parentNode, decorators, 24577);
}
function emitTypeArguments(parentNode, typeArguments) {
emitList(parentNode, typeArguments, 26960);
}
function emitTypeParameters(parentNode, typeParameters) {
emitList(parentNode, typeParameters, 26960);
}
function emitParameters(parentNode, parameters) {
emitList(parentNode, parameters, 1360);
}
function canEmitSimpleArrowHead(parentNode, parameters) {
var parameter = ts.singleOrUndefined(parameters);
return parameter
&& parameter.pos === parentNode.pos
&& !(ts.isArrowFunction(parentNode) && parentNode.type)
&& !ts.some(parentNode.decorators)
&& !ts.some(parentNode.modifiers)
&& !ts.some(parentNode.typeParameters)
&& !ts.some(parameter.decorators)
&& !ts.some(parameter.modifiers)
&& !parameter.dotDotDotToken
&& !parameter.questionToken
&& !parameter.type
&& !parameter.initializer
&& ts.isIdentifier(parameter.name);
}
function emitParametersForArrow(parentNode, parameters) {
if (canEmitSimpleArrowHead(parentNode, parameters)) {
emitList(parentNode, parameters, 1360 & ~1024);
}
else {
emitParameters(parentNode, parameters);
}
}
function emitParametersForIndexSignature(parentNode, parameters) {
emitList(parentNode, parameters, 4432);
}
function emitList(parentNode, children, format, start, count) {
emitNodeList(emit, parentNode, children, format, start, count);
}
function emitExpressionList(parentNode, children, format, start, count) {
emitNodeList(emitExpression, parentNode, children, format, start, count);
}
function emitNodeList(emit, parentNode, children, format, start, count) {
if (start === void 0) { start = 0; }
if (count === void 0) { count = children ? children.length - start : 0; }
var isUndefined = children === undefined;
if (isUndefined && format & 8192) {
return;
}
var isEmpty = isUndefined || start >= children.length || count === 0;
if (isEmpty && format & 16384) {
if (onBeforeEmitNodeArray) {
onBeforeEmitNodeArray(children);
}
if (onAfterEmitNodeArray) {
onAfterEmitNodeArray(children);
}
return;
}
if (format & 7680) {
write(getOpeningBracket(format));
}
if (onBeforeEmitNodeArray) {
onBeforeEmitNodeArray(children);
}
if (isEmpty) {
if (format & 1) {
writeLine();
}
else if (format & 128 && !(format & 262144)) {
write(" ");
}
}
else {
var mayEmitInterveningComments = (format & 131072) === 0;
var shouldEmitInterveningComments = mayEmitInterveningComments;
if (shouldWriteLeadingLineTerminator(parentNode, children, format)) {
writeLine();
shouldEmitInterveningComments = false;
}
else if (format & 128) {
write(" ");
}
if (format & 64) {
increaseIndent();
}
var previousSibling = void 0;
var shouldDecreaseIndentAfterEmit = void 0;
var delimiter = getDelimiter(format);
for (var i = 0; i < count; i++) {
var child = children[start + i];
if (previousSibling) {
if (delimiter && previousSibling.end !== parentNode.end) {
emitLeadingCommentsOfPosition(previousSibling.end);
}
write(delimiter);
if (shouldWriteSeparatingLineTerminator(previousSibling, child, format)) {
if ((format & (3 | 64)) === 0) {
increaseIndent();
shouldDecreaseIndentAfterEmit = true;
}
writeLine();
shouldEmitInterveningComments = false;
}
else if (previousSibling && format & 256) {
write(" ");
}
}
if (shouldEmitInterveningComments) {
if (emitTrailingCommentsOfPosition) {
var commentRange = ts.getCommentRange(child);
emitTrailingCommentsOfPosition(commentRange.pos);
}
}
else {
shouldEmitInterveningComments = mayEmitInterveningComments;
}
emit(child);
if (shouldDecreaseIndentAfterEmit) {
decreaseIndent();
shouldDecreaseIndentAfterEmit = false;
}
previousSibling = child;
}
var hasTrailingComma = (format & 32) && children.hasTrailingComma;
if (format & 16 && hasTrailingComma) {
write(",");
}
if (previousSibling && delimiter && previousSibling.end !== parentNode.end && !(ts.getEmitFlags(previousSibling) & 1024)) {
emitLeadingCommentsOfPosition(previousSibling.end);
}
if (format & 64) {
decreaseIndent();
}
if (shouldWriteClosingLineTerminator(parentNode, children, format)) {
writeLine();
}
else if (format & 128) {
write(" ");
}
}
if (onAfterEmitNodeArray) {
onAfterEmitNodeArray(children);
}
if (format & 7680) {
write(getClosingBracket(format));
}
}
function write(s) {
writer.write(s);
}
function writeLine() {
writer.writeLine();
}
function increaseIndent() {
writer.increaseIndent();
}
function decreaseIndent() {
writer.decreaseIndent();
}
function writeIfAny(nodes, text) {
if (ts.some(nodes)) {
write(text);
}
}
function writeToken(token, pos, contextNode) {
return onEmitSourceMapOfToken
? onEmitSourceMapOfToken(contextNode, token, pos, writeTokenText)
: writeTokenText(token, pos);
}
function writeTokenNode(node) {
if (onBeforeEmitToken) {
onBeforeEmitToken(node);
}
write(ts.tokenToString(node.kind));
if (onAfterEmitToken) {
onAfterEmitToken(node);
}
}
function writeTokenText(token, pos) {
var tokenString = ts.tokenToString(token);
write(tokenString);
return pos < 0 ? pos : pos + tokenString.length;
}
function writeLineOrSpace(node) {
if (ts.getEmitFlags(node) & 1) {
write(" ");
}
else {
writeLine();
}
}
function writeLines(text) {
var lines = text.split(/\r\n?|\n/g);
var indentation = guessIndentation(lines);
for (var i = 0; i < lines.length; i++) {
var line = indentation ? lines[i].slice(indentation) : lines[i];
if (line.length) {
writeLine();
write(line);
writeLine();
}
}
}
function guessIndentation(lines) {
var indentation;
for (var _a = 0, lines_1 = lines; _a < lines_1.length; _a++) {
var line = lines_1[_a];
for (var i = 0; i < line.length && (indentation === undefined || i < indentation); i++) {
if (!ts.isWhiteSpaceLike(line.charCodeAt(i))) {
if (indentation === undefined || i < indentation) {
indentation = i;
break;
}
}
}
}
return indentation;
}
function increaseIndentIf(value, valueToWriteWhenNotIndenting) {
if (value) {
increaseIndent();
writeLine();
}
else if (valueToWriteWhenNotIndenting) {
write(valueToWriteWhenNotIndenting);
}
}
function decreaseIndentIf(value1, value2) {
if (value1) {
decreaseIndent();
}
if (value2) {
decreaseIndent();
}
}
function shouldWriteLeadingLineTerminator(parentNode, children, format) {
if (format & 1) {
return true;
}
if (format & 2) {
if (format & 32768) {
return true;
}
var firstChild = children[0];
if (firstChild === undefined) {
return !ts.rangeIsOnSingleLine(parentNode, currentSourceFile);
}
else if (ts.positionIsSynthesized(parentNode.pos) || ts.nodeIsSynthesized(firstChild)) {
return synthesizedNodeStartsOnNewLine(firstChild, format);
}
else {
return !ts.rangeStartPositionsAreOnSameLine(parentNode, firstChild, currentSourceFile);
}
}
else {
return false;
}
}
function shouldWriteSeparatingLineTerminator(previousNode, nextNode, format) {
if (format & 1) {
return true;
}
else if (format & 2) {
if (previousNode === undefined || nextNode === undefined) {
return false;
}
else if (ts.nodeIsSynthesized(previousNode) || ts.nodeIsSynthesized(nextNode)) {
return synthesizedNodeStartsOnNewLine(previousNode, format) || synthesizedNodeStartsOnNewLine(nextNode, format);
}
else {
return !ts.rangeEndIsOnSameLineAsRangeStart(previousNode, nextNode, currentSourceFile);
}
}
else {
return nextNode.startsOnNewLine;
}
}
function shouldWriteClosingLineTerminator(parentNode, children, format) {
if (format & 1) {
return (format & 65536) === 0;
}
else if (format & 2) {
if (format & 32768) {
return true;
}
var lastChild = ts.lastOrUndefined(children);
if (lastChild === undefined) {
return !ts.rangeIsOnSingleLine(parentNode, currentSourceFile);
}
else if (ts.positionIsSynthesized(parentNode.pos) || ts.nodeIsSynthesized(lastChild)) {
return synthesizedNodeStartsOnNewLine(lastChild, format);
}
else {
return !ts.rangeEndPositionsAreOnSameLine(parentNode, lastChild, currentSourceFile);
}
}
else {
return false;
}
}
function synthesizedNodeStartsOnNewLine(node, format) {
if (ts.nodeIsSynthesized(node)) {
var startsOnNewLine = node.startsOnNewLine;
if (startsOnNewLine === undefined) {
return (format & 32768) !== 0;
}
return startsOnNewLine;
}
return (format & 32768) !== 0;
}
function needsIndentation(parent, node1, node2) {
parent = skipSynthesizedParentheses(parent);
node1 = skipSynthesizedParentheses(node1);
node2 = skipSynthesizedParentheses(node2);
if (node2.startsOnNewLine) {
return true;
}
return !ts.nodeIsSynthesized(parent)
&& !ts.nodeIsSynthesized(node1)
&& !ts.nodeIsSynthesized(node2)
&& !ts.rangeEndIsOnSameLineAsRangeStart(node1, node2, currentSourceFile);
}
function isEmptyBlock(block) {
return block.statements.length === 0
&& ts.rangeEndIsOnSameLineAsRangeStart(block, block, currentSourceFile);
}
function skipSynthesizedParentheses(node) {
while (node.kind === 185 && ts.nodeIsSynthesized(node)) {
node = node.expression;
}
return node;
}
function getTextOfNode(node, includeTrivia) {
if (ts.isGeneratedIdentifier(node)) {
return generateName(node);
}
else if (ts.isIdentifier(node) && (ts.nodeIsSynthesized(node) || !node.parent)) {
return ts.idText(node);
}
else if (node.kind === 9 && node.textSourceNode) {
return getTextOfNode(node.textSourceNode, includeTrivia);
}
else if (ts.isLiteralExpression(node) && (ts.nodeIsSynthesized(node) || !node.parent)) {
return node.text;
}
return ts.getSourceTextOfNodeFromSourceFile(currentSourceFile, node, includeTrivia);
}
function getLiteralTextOfNode(node) {
if (node.kind === 9 && node.textSourceNode) {
var textSourceNode = node.textSourceNode;
if (ts.isIdentifier(textSourceNode)) {
return ts.getEmitFlags(node) & 16777216 ?
"\"" + ts.escapeString(getTextOfNode(textSourceNode)) + "\"" :
"\"" + ts.escapeNonAsciiString(getTextOfNode(textSourceNode)) + "\"";
}
else {
return getLiteralTextOfNode(textSourceNode);
}
}
return ts.getLiteralText(node, currentSourceFile);
}
function pushNameGenerationScope() {
tempFlagsStack.push(tempFlags);
tempFlags = 0;
}
function popNameGenerationScope() {
tempFlags = tempFlagsStack.pop();
}
function generateName(name) {
if (name.autoGenerateKind === 4) {
var node = getNodeForGeneratedName(name);
return generateNameCached(node);
}
else {
var autoGenerateId = name.autoGenerateId;
return autoGeneratedIdToGeneratedName[autoGenerateId] || (autoGeneratedIdToGeneratedName[autoGenerateId] = makeName(name));
}
}
function generateNameCached(node) {
var nodeId = ts.getNodeId(node);
return nodeIdToGeneratedName[nodeId] || (nodeIdToGeneratedName[nodeId] = generateNameForNode(node));
}
function isUniqueName(name) {
return !(hasGlobalName && hasGlobalName(name))
&& !currentSourceFile.identifiers.has(name)
&& !generatedNames.has(name);
}
function isUniqueLocalName(name, container) {
for (var node = container; ts.isNodeDescendantOf(node, container); node = node.nextContainer) {
if (node.locals) {
var local = node.locals.get(ts.escapeLeadingUnderscores(name));
if (local && local.flags & (107455 | 1048576 | 2097152)) {
return false;
}
}
}
return true;
}
function makeTempVariableName(flags) {
if (flags && !(tempFlags & flags)) {
var name = flags === 268435456 ? "_i" : "_n";
if (isUniqueName(name)) {
tempFlags |= flags;
return name;
}
}
while (true) {
var count = tempFlags & 268435455;
tempFlags++;
if (count !== 8 && count !== 13) {
var name = count < 26
? "_" + String.fromCharCode(97 + count)
: "_" + (count - 26);
if (isUniqueName(name)) {
return name;
}
}
}
}
function makeUniqueName(baseName) {
if (baseName.charCodeAt(baseName.length - 1) !== 95) {
baseName += "_";
}
var i = 1;
while (true) {
var generatedName = baseName + i;
if (isUniqueName(generatedName)) {
generatedNames.set(generatedName, true);
return generatedName;
}
i++;
}
}
function generateNameForModuleOrEnum(node) {
var name = getTextOfNode(node.name);
return isUniqueLocalName(name, node) ? name : makeUniqueName(name);
}
function generateNameForImportOrExportDeclaration(node) {
var expr = ts.getExternalModuleName(node);
var baseName = ts.isStringLiteral(expr) ?
ts.makeIdentifierFromModuleName(expr.text) : "module";
return makeUniqueName(baseName);
}
function generateNameForExportDefault() {
return makeUniqueName("default");
}
function generateNameForClassExpression() {
return makeUniqueName("class");
}
function generateNameForMethodOrAccessor(node) {
if (ts.isIdentifier(node.name)) {
return generateNameCached(node.name);
}
return makeTempVariableName(0);
}
function generateNameForNode(node) {
switch (node.kind) {
case 71:
return makeUniqueName(getTextOfNode(node));
case 233:
case 232:
return generateNameForModuleOrEnum(node);
case 238:
case 244:
return generateNameForImportOrExportDeclaration(node);
case 228:
case 229:
case 243:
return generateNameForExportDefault();
case 199:
return generateNameForClassExpression();
case 151:
case 153:
case 154:
return generateNameForMethodOrAccessor(node);
default:
return makeTempVariableName(0);
}
}
function makeName(name) {
switch (name.autoGenerateKind) {
case 1:
return makeTempVariableName(0);
case 2:
return makeTempVariableName(268435456);
case 3:
return makeUniqueName(ts.idText(name));
}
ts.Debug.fail("Unsupported GeneratedIdentifierKind.");
}
function getNodeForGeneratedName(name) {
var autoGenerateId = name.autoGenerateId;
var node = name;
var original = node.original;
while (original) {
node = original;
if (ts.isIdentifier(node)
&& node.autoGenerateKind === 4
&& node.autoGenerateId !== autoGenerateId) {
break;
}
original = node.original;
}
return node;
}
}
ts.createPrinter = createPrinter;
function createDelimiterMap() {
var delimiters = [];
delimiters[0] = "";
delimiters[16] = ",";
delimiters[4] = " |";
delimiters[8] = " &";
return delimiters;
}
function getDelimiter(format) {
return delimiters[format & 28];
}
function createBracketsMap() {
var brackets = [];
brackets[512] = ["{", "}"];
brackets[1024] = ["(", ")"];
brackets[2048] = ["<", ">"];
brackets[4096] = ["[", "]"];
return brackets;
}
function getOpeningBracket(format) {
return brackets[format & 7680][0];
}
function getClosingBracket(format) {
return brackets[format & 7680][1];
}
})(ts || (ts = {}));
var ts;
(function (ts) {
function updateMissingFilePathsWatch(program, missingFileWatches, createMissingFileWatch) {
var missingFilePaths = program.getMissingFilePaths();
var newMissingFilePathMap = ts.arrayToSet(missingFilePaths);
ts.mutateMap(missingFileWatches, newMissingFilePathMap, {
createNewValue: createMissingFileWatch,
onDeleteValue: closeFileWatcher
});
}
ts.updateMissingFilePathsWatch = updateMissingFilePathsWatch;
function updateWatchingWildcardDirectories(existingWatchedForWildcards, wildcardDirectories, watchDirectory) {
ts.mutateMap(existingWatchedForWildcards, wildcardDirectories, {
createNewValue: createWildcardDirectoryWatcher,
onDeleteValue: closeFileWatcherOf,
onExistingValue: updateWildcardDirectoryWatcher
});
function createWildcardDirectoryWatcher(directory, flags) {
return {
watcher: watchDirectory(directory, flags),
flags: flags
};
}
function updateWildcardDirectoryWatcher(existingWatcher, flags, directory) {
if (existingWatcher.flags === flags) {
return;
}
existingWatcher.watcher.close();
existingWatchedForWildcards.set(directory, createWildcardDirectoryWatcher(directory, flags));
}
}
ts.updateWatchingWildcardDirectories = updateWatchingWildcardDirectories;
function addFileWatcher(host, file, cb) {
return host.watchFile(file, cb);
}
ts.addFileWatcher = addFileWatcher;
function addFileWatcherWithLogging(host, file, cb, log) {
var watcherCaption = "FileWatcher:: ";
return createWatcherWithLogging(addFileWatcher, watcherCaption, log, false, host, file, cb);
}
ts.addFileWatcherWithLogging = addFileWatcherWithLogging;
function addFileWatcherWithOnlyTriggerLogging(host, file, cb, log) {
var watcherCaption = "FileWatcher:: ";
return createWatcherWithLogging(addFileWatcher, watcherCaption, log, true, host, file, cb);
}
ts.addFileWatcherWithOnlyTriggerLogging = addFileWatcherWithOnlyTriggerLogging;
function addFilePathWatcher(host, file, cb, path) {
return host.watchFile(file, function (fileName, eventKind) { return cb(fileName, eventKind, path); });
}
ts.addFilePathWatcher = addFilePathWatcher;
function addFilePathWatcherWithLogging(host, file, cb, path, log) {
var watcherCaption = "FileWatcher:: ";
return createWatcherWithLogging(addFileWatcher, watcherCaption, log, false, host, file, cb, path);
}
ts.addFilePathWatcherWithLogging = addFilePathWatcherWithLogging;
function addFilePathWatcherWithOnlyTriggerLogging(host, file, cb, path, log) {
var watcherCaption = "FileWatcher:: ";
return createWatcherWithLogging(addFileWatcher, watcherCaption, log, true, host, file, cb, path);
}
ts.addFilePathWatcherWithOnlyTriggerLogging = addFilePathWatcherWithOnlyTriggerLogging;
function addDirectoryWatcher(host, directory, cb, flags) {
var recursive = (flags & 1) !== 0;
return host.watchDirectory(directory, cb, recursive);
}
ts.addDirectoryWatcher = addDirectoryWatcher;
function addDirectoryWatcherWithLogging(host, directory, cb, flags, log) {
var watcherCaption = "DirectoryWatcher " + ((flags & 1) !== 0 ? "recursive" : "") + ":: ";
return createWatcherWithLogging(addDirectoryWatcher, watcherCaption, log, false, host, directory, cb, flags);
}
ts.addDirectoryWatcherWithLogging = addDirectoryWatcherWithLogging;
function addDirectoryWatcherWithOnlyTriggerLogging(host, directory, cb, flags, log) {
var watcherCaption = "DirectoryWatcher " + ((flags & 1) !== 0 ? "recursive" : "") + ":: ";
return createWatcherWithLogging(addDirectoryWatcher, watcherCaption, log, true, host, directory, cb, flags);
}
ts.addDirectoryWatcherWithOnlyTriggerLogging = addDirectoryWatcherWithOnlyTriggerLogging;
function createWatcherWithLogging(addWatch, watcherCaption, log, logOnlyTrigger, host, file, cb, optional) {
var info = "PathInfo: " + file;
if (!logOnlyTrigger) {
log(watcherCaption + "Added: " + info);
}
var watcher = addWatch(host, file, function (fileName, cbOptional1) {
var optionalInfo = cbOptional1 !== undefined ? " " + cbOptional1 : "";
log(watcherCaption + "Trigger: " + fileName + optionalInfo + " " + info);
var start = ts.timestamp();
cb(fileName, cbOptional1, optional);
var elapsed = ts.timestamp() - start;
log(watcherCaption + "Elapsed: " + elapsed + "ms Trigger: " + fileName + optionalInfo + " " + info);
}, optional);
return {
close: function () {
if (!logOnlyTrigger) {
log(watcherCaption + "Close: " + info);
}
watcher.close();
}
};
}
function closeFileWatcher(watcher) {
watcher.close();
}
ts.closeFileWatcher = closeFileWatcher;
function closeFileWatcherOf(objWithWatcher) {
objWithWatcher.watcher.close();
}
ts.closeFileWatcherOf = closeFileWatcherOf;
})(ts || (ts = {}));
var ts;
(function (ts) {
function getFileEmitOutput(program, sourceFile, emitOnlyDtsFiles, cancellationToken, customTransformers) {
var outputFiles = [];
var emitResult = program.emit(sourceFile, writeFile, cancellationToken, emitOnlyDtsFiles, customTransformers);
return { outputFiles: outputFiles, emitSkipped: emitResult.emitSkipped };
function writeFile(fileName, text, writeByteOrderMark) {
outputFiles.push({ name: fileName, writeByteOrderMark: writeByteOrderMark, text: text });
}
}
ts.getFileEmitOutput = getFileEmitOutput;
function createBuilder(options) {
var isModuleEmit;
var fileInfos = ts.createMap();
var semanticDiagnosticsPerFile = ts.createMap();
var changedFilesSet = ts.createMap();
var hasShapeChanged = ts.createMap();
var allFilesExcludingDefaultLibraryFile;
var emitHandler;
return {
updateProgram: updateProgram,
getFilesAffectedBy: getFilesAffectedBy,
emitChangedFiles: emitChangedFiles,
getSemanticDiagnostics: getSemanticDiagnostics,
clear: clear
};
function createProgramGraph(program) {
var currentIsModuleEmit = program.getCompilerOptions().module !== ts.ModuleKind.None;
if (isModuleEmit !== currentIsModuleEmit) {
isModuleEmit = currentIsModuleEmit;
emitHandler = isModuleEmit ? getModuleEmitHandler() : getNonModuleEmitHandler();
fileInfos.clear();
semanticDiagnosticsPerFile.clear();
}
hasShapeChanged.clear();
allFilesExcludingDefaultLibraryFile = undefined;
ts.mutateMap(fileInfos, ts.arrayToMap(program.getSourceFiles(), function (sourceFile) { return sourceFile.path; }), {
createNewValue: function (_path, sourceFile) { return addNewFileInfo(program, sourceFile); },
onDeleteValue: removeExistingFileInfo,
onExistingValue: function (existingInfo, sourceFile) { return updateExistingFileInfo(program, existingInfo, sourceFile); }
});
}
function registerChangedFile(path) {
changedFilesSet.set(path, true);
semanticDiagnosticsPerFile.delete(path);
}
function addNewFileInfo(program, sourceFile) {
registerChangedFile(sourceFile.path);
emitHandler.onAddSourceFile(program, sourceFile);
return { version: sourceFile.version, signature: undefined };
}
function removeExistingFileInfo(_existingFileInfo, path) {
changedFilesSet.delete(path);
semanticDiagnosticsPerFile.delete(path);
emitHandler.onRemoveSourceFile(path);
}
function updateExistingFileInfo(program, existingInfo, sourceFile) {
if (existingInfo.version !== sourceFile.version) {
registerChangedFile(sourceFile.path);
existingInfo.version = sourceFile.version;
emitHandler.onUpdateSourceFile(program, sourceFile);
}
else if (emitHandler.onUpdateSourceFileWithSameVersion(program, sourceFile)) {
registerChangedFile(sourceFile.path);
}
}
function ensureProgramGraph(program) {
if (!emitHandler) {
createProgramGraph(program);
}
}
function updateProgram(newProgram) {
if (emitHandler) {
createProgramGraph(newProgram);
}
}
function getFilesAffectedBy(program, path) {
ensureProgramGraph(program);
var sourceFile = program.getSourceFileByPath(path);
if (!sourceFile) {
return ts.emptyArray;
}
if (!updateShapeSignature(program, sourceFile)) {
return [sourceFile];
}
return emitHandler.getFilesAffectedByUpdatedShape(program, sourceFile);
}
function emitChangedFiles(program, writeFileCallback) {
ensureProgramGraph(program);
var compilerOptions = program.getCompilerOptions();
if (!changedFilesSet.size) {
return ts.emptyArray;
}
if (compilerOptions.outFile || compilerOptions.out) {
ts.Debug.assert(semanticDiagnosticsPerFile.size === 0);
changedFilesSet.clear();
return [program.emit(undefined, writeFileCallback)];
}
var seenFiles = ts.createMap();
var result;
changedFilesSet.forEach(function (_true, path) {
var affectedFiles = getFilesAffectedBy(program, path);
affectedFiles.forEach(function (affectedFile) {
semanticDiagnosticsPerFile.delete(affectedFile.path);
if (!seenFiles.has(affectedFile.path)) {
seenFiles.set(affectedFile.path, true);
(result || (result = [])).push(program.emit(affectedFile, writeFileCallback));
}
});
});
changedFilesSet.clear();
return result || ts.emptyArray;
}
function getSemanticDiagnostics(program, cancellationToken) {
ensureProgramGraph(program);
ts.Debug.assert(changedFilesSet.size === 0);
var compilerOptions = program.getCompilerOptions();
if (compilerOptions.outFile || compilerOptions.out) {
ts.Debug.assert(semanticDiagnosticsPerFile.size === 0);
return program.getSemanticDiagnostics(undefined, cancellationToken);
}
var diagnostics;
for (var _i = 0, _a = program.getSourceFiles(); _i < _a.length; _i++) {
var sourceFile = _a[_i];
diagnostics = ts.addRange(diagnostics, getSemanticDiagnosticsOfFile(program, sourceFile, cancellationToken));
}
return diagnostics || ts.emptyArray;
}
function getSemanticDiagnosticsOfFile(program, sourceFile, cancellationToken) {
var path = sourceFile.path;
var cachedDiagnostics = semanticDiagnosticsPerFile.get(path);
if (cachedDiagnostics) {
return cachedDiagnostics;
}
var diagnostics = program.getSemanticDiagnostics(sourceFile, cancellationToken);
semanticDiagnosticsPerFile.set(path, diagnostics);
return diagnostics;
}
function clear() {
isModuleEmit = undefined;
emitHandler = undefined;
fileInfos.clear();
semanticDiagnosticsPerFile.clear();
changedFilesSet.clear();
hasShapeChanged.clear();
}
function containsOnlyAmbientModules(sourceFile) {
for (var _i = 0, _a = sourceFile.statements; _i < _a.length; _i++) {
var statement = _a[_i];
if (!ts.isModuleWithStringLiteralName(statement)) {
return false;
}
}
return true;
}
function updateShapeSignature(program, sourceFile) {
ts.Debug.assert(!!sourceFile);
if (hasShapeChanged.has(sourceFile.path)) {
return false;
}
hasShapeChanged.set(sourceFile.path, true);
var info = fileInfos.get(sourceFile.path);
ts.Debug.assert(!!info);
var prevSignature = info.signature;
var latestSignature;
if (sourceFile.isDeclarationFile) {
latestSignature = sourceFile.version;
info.signature = latestSignature;
}
else {
var emitOutput = getFileEmitOutput(program, sourceFile, true);
if (emitOutput.outputFiles && emitOutput.outputFiles.length > 0) {
latestSignature = options.computeHash(emitOutput.outputFiles[0].text);
info.signature = latestSignature;
}
else {
latestSignature = prevSignature;
}
}
return !prevSignature || latestSignature !== prevSignature;
}
function getReferencedFiles(program, sourceFile) {
var referencedFiles;
if (sourceFile.imports && sourceFile.imports.length > 0) {
var checker = program.getTypeChecker();
for (var _i = 0, _a = sourceFile.imports; _i < _a.length; _i++) {
var importName = _a[_i];
var symbol = checker.getSymbolAtLocation(importName);
if (symbol && symbol.declarations && symbol.declarations[0]) {
var declarationSourceFile = ts.getSourceFileOfNode(symbol.declarations[0]);
if (declarationSourceFile) {
addReferencedFile(declarationSourceFile.path);
}
}
}
}
var sourceFileDirectory = ts.getDirectoryPath(sourceFile.path);
if (sourceFile.referencedFiles && sourceFile.referencedFiles.length > 0) {
for (var _b = 0, _c = sourceFile.referencedFiles; _b < _c.length; _b++) {
var referencedFile = _c[_b];
var referencedPath = ts.toPath(referencedFile.fileName, sourceFileDirectory, options.getCanonicalFileName);
addReferencedFile(referencedPath);
}
}
if (sourceFile.resolvedTypeReferenceDirectiveNames) {
sourceFile.resolvedTypeReferenceDirectiveNames.forEach(function (resolvedTypeReferenceDirective) {
if (!resolvedTypeReferenceDirective) {
return;
}
var fileName = resolvedTypeReferenceDirective.resolvedFileName;
var typeFilePath = ts.toPath(fileName, sourceFileDirectory, options.getCanonicalFileName);
addReferencedFile(typeFilePath);
});
}
return referencedFiles;
function addReferencedFile(referencedPath) {
if (!referencedFiles) {
referencedFiles = ts.createMap();
}
referencedFiles.set(referencedPath, true);
}
}
function getAllFilesExcludingDefaultLibraryFile(program, firstSourceFile) {
if (allFilesExcludingDefaultLibraryFile) {
return allFilesExcludingDefaultLibraryFile;
}
var result;
addSourceFile(firstSourceFile);
for (var _i = 0, _a = program.getSourceFiles(); _i < _a.length; _i++) {
var sourceFile = _a[_i];
if (sourceFile !== firstSourceFile) {
addSourceFile(sourceFile);
}
}
allFilesExcludingDefaultLibraryFile = result || ts.emptyArray;
return allFilesExcludingDefaultLibraryFile;
function addSourceFile(sourceFile) {
if (!program.isSourceFileDefaultLibrary(sourceFile)) {
(result || (result = [])).push(sourceFile);
}
}
}
function getNonModuleEmitHandler() {
return {
onAddSourceFile: ts.noop,
onRemoveSourceFile: ts.noop,
onUpdateSourceFile: ts.noop,
onUpdateSourceFileWithSameVersion: ts.returnFalse,
getFilesAffectedByUpdatedShape: getFilesAffectedByUpdatedShape
};
function getFilesAffectedByUpdatedShape(program, sourceFile) {
var options = program.getCompilerOptions();
if (options && (options.out || options.outFile)) {
return [sourceFile];
}
return getAllFilesExcludingDefaultLibraryFile(program, sourceFile);
}
}
function getModuleEmitHandler() {
var references = ts.createMap();
return {
onAddSourceFile: setReferences,
onRemoveSourceFile: onRemoveSourceFile,
onUpdateSourceFile: updateReferences,
onUpdateSourceFileWithSameVersion: updateReferencesTrackingChangedReferences,
getFilesAffectedByUpdatedShape: getFilesAffectedByUpdatedShape
};
function setReferences(program, sourceFile) {
var newReferences = getReferencedFiles(program, sourceFile);
if (newReferences) {
references.set(sourceFile.path, newReferences);
}
}
function updateReferences(program, sourceFile) {
var newReferences = getReferencedFiles(program, sourceFile);
if (newReferences) {
references.set(sourceFile.path, newReferences);
}
else {
references.delete(sourceFile.path);
}
}
function updateReferencesTrackingChangedReferences(program, sourceFile) {
var newReferences = getReferencedFiles(program, sourceFile);
if (!newReferences) {
return references.delete(sourceFile.path);
}
var oldReferences = references.get(sourceFile.path);
references.set(sourceFile.path, newReferences);
if (!oldReferences || oldReferences.size !== newReferences.size) {
return true;
}
return ts.forEachEntry(newReferences, function (_true, referencedPath) { return !oldReferences.delete(referencedPath); }) ||
!!oldReferences.size;
}
function onRemoveSourceFile(removedFilePath) {
references.forEach(function (referencesInFile, filePath) {
if (referencesInFile.has(removedFilePath)) {
var referencedByInfo = fileInfos.get(filePath);
if (referencedByInfo) {
registerChangedFile(filePath);
}
}
});
references.delete(removedFilePath);
}
function getReferencedByPaths(referencedFilePath) {
return ts.mapDefinedIter(references.entries(), function (_a) {
var filePath = _a[0], referencesInFile = _a[1];
return referencesInFile.has(referencedFilePath) ? filePath : undefined;
});
}
function getFilesAffectedByUpdatedShape(program, sourceFile) {
if (!ts.isExternalModule(sourceFile) && !containsOnlyAmbientModules(sourceFile)) {
return getAllFilesExcludingDefaultLibraryFile(program, sourceFile);
}
var compilerOptions = program.getCompilerOptions();
if (compilerOptions && (compilerOptions.isolatedModules || compilerOptions.out || compilerOptions.outFile)) {
return [sourceFile];
}
var seenFileNamesMap = ts.createMap();
var path = sourceFile.path;
seenFileNamesMap.set(path, sourceFile);
var queue = getReferencedByPaths(path);
while (queue.length > 0) {
var currentPath = queue.pop();
if (!seenFileNamesMap.has(currentPath)) {
var currentSourceFile = program.getSourceFileByPath(currentPath);
seenFileNamesMap.set(currentPath, currentSourceFile);
if (currentSourceFile && updateShapeSignature(program, currentSourceFile)) {
queue.push.apply(queue, getReferencedByPaths(currentPath));
}
}
}
return ts.flatMapIter(seenFileNamesMap.values(), function (value) { return value; });
}
}
}
ts.createBuilder = createBuilder;
})(ts || (ts = {}));
var ts;
(function (ts) {
var ignoreDiagnosticCommentRegEx = /(^\s*$)|(^\s*\/\/\/?\s*(@ts-ignore)?)/;
function findConfigFile(searchPath, fileExists, configName) {
if (configName === void 0) { configName = "tsconfig.json"; }
while (true) {
var fileName = ts.combinePaths(searchPath, configName);
if (fileExists(fileName)) {
return fileName;
}
var parentPath = ts.getDirectoryPath(searchPath);
if (parentPath === searchPath) {
break;
}
searchPath = parentPath;
}
return undefined;
}
ts.findConfigFile = findConfigFile;
function resolveTripleslashReference(moduleName, containingFile) {
var basePath = ts.getDirectoryPath(containingFile);
var referencedFileName = ts.isRootedDiskPath(moduleName) ? moduleName : ts.combinePaths(basePath, moduleName);
return ts.normalizePath(referencedFileName);
}
ts.resolveTripleslashReference = resolveTripleslashReference;
function computeCommonSourceDirectoryOfFilenames(fileNames, currentDirectory, getCanonicalFileName) {
var commonPathComponents;
var failed = ts.forEach(fileNames, function (sourceFile) {
var sourcePathComponents = ts.getNormalizedPathComponents(sourceFile, currentDirectory);
sourcePathComponents.pop();
if (!commonPathComponents) {
commonPathComponents = sourcePathComponents;
return;
}
var n = Math.min(commonPathComponents.length, sourcePathComponents.length);
for (var i = 0; i < n; i++) {
if (getCanonicalFileName(commonPathComponents[i]) !== getCanonicalFileName(sourcePathComponents[i])) {
if (i === 0) {
return true;
}
commonPathComponents.length = i;
break;
}
}
if (sourcePathComponents.length < commonPathComponents.length) {
commonPathComponents.length = sourcePathComponents.length;
}
});
if (failed) {
return "";
}
if (!commonPathComponents) {
return currentDirectory;
}
return ts.getNormalizedPathFromPathComponents(commonPathComponents);
}
ts.computeCommonSourceDirectoryOfFilenames = computeCommonSourceDirectoryOfFilenames;
function createCompilerHost(options, setParentNodes) {
var existingDirectories = ts.createMap();
function getCanonicalFileName(fileName) {
return ts.sys.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase();
}
function getSourceFile(fileName, languageVersion, onError) {
var text;
try {
ts.performance.mark("beforeIORead");
text = ts.sys.readFile(fileName, options.charset);
ts.performance.mark("afterIORead");
ts.performance.measure("I/O Read", "beforeIORead", "afterIORead");
}
catch (e) {
if (onError) {
onError(e.message);
}
text = "";
}
return text !== undefined ? ts.createSourceFile(fileName, text, languageVersion, setParentNodes) : undefined;
}
function directoryExists(directoryPath) {
if (existingDirectories.has(directoryPath)) {
return true;
}
if (ts.sys.directoryExists(directoryPath)) {
existingDirectories.set(directoryPath, true);
return true;
}
return false;
}
function ensureDirectoriesExist(directoryPath) {
if (directoryPath.length > ts.getRootLength(directoryPath) && !directoryExists(directoryPath)) {
var parentDirectory = ts.getDirectoryPath(directoryPath);
ensureDirectoriesExist(parentDirectory);
ts.sys.createDirectory(directoryPath);
}
}
var outputFingerprints;
function writeFileIfUpdated(fileName, data, writeByteOrderMark) {
if (!outputFingerprints) {
outputFingerprints = ts.createMap();
}
var hash = ts.sys.createHash(data);
var mtimeBefore = ts.sys.getModifiedTime(fileName);
if (mtimeBefore) {
var fingerprint = outputFingerprints.get(fileName);
if (fingerprint &&
fingerprint.byteOrderMark === writeByteOrderMark &&
fingerprint.hash === hash &&
fingerprint.mtime.getTime() === mtimeBefore.getTime()) {
return;
}
}
ts.sys.writeFile(fileName, data, writeByteOrderMark);
var mtimeAfter = ts.sys.getModifiedTime(fileName);
outputFingerprints.set(fileName, {
hash: hash,
byteOrderMark: writeByteOrderMark,
mtime: mtimeAfter
});
}
function writeFile(fileName, data, writeByteOrderMark, onError) {
try {
ts.performance.mark("beforeIOWrite");
ensureDirectoriesExist(ts.getDirectoryPath(ts.normalizePath(fileName)));
if (ts.isWatchSet(options) && ts.sys.createHash && ts.sys.getModifiedTime) {
writeFileIfUpdated(fileName, data, writeByteOrderMark);
}
else {
ts.sys.writeFile(fileName, data, writeByteOrderMark);
}
ts.performance.mark("afterIOWrite");
ts.performance.measure("I/O Write", "beforeIOWrite", "afterIOWrite");
}
catch (e) {
if (onError) {
onError(e.message);
}
}
}
function getDefaultLibLocation() {
return ts.getDirectoryPath(ts.normalizePath(ts.sys.getExecutingFilePath()));
}
var newLine = ts.getNewLineCharacter(options);
var realpath = ts.sys.realpath && (function (path) { return ts.sys.realpath(path); });
return {
getSourceFile: getSourceFile,
getDefaultLibLocation: getDefaultLibLocation,
getDefaultLibFileName: function (options) { return ts.combinePaths(getDefaultLibLocation(), ts.getDefaultLibFileName(options)); },
writeFile: writeFile,
getCurrentDirectory: ts.memoize(function () { return ts.sys.getCurrentDirectory(); }),
useCaseSensitiveFileNames: function () { return ts.sys.useCaseSensitiveFileNames; },
getCanonicalFileName: getCanonicalFileName,
getNewLine: function () { return newLine; },
fileExists: function (fileName) { return ts.sys.fileExists(fileName); },
readFile: function (fileName) { return ts.sys.readFile(fileName); },
trace: function (s) { return ts.sys.write(s + newLine); },
directoryExists: function (directoryName) { return ts.sys.directoryExists(directoryName); },
getEnvironmentVariable: function (name) { return ts.sys.getEnvironmentVariable ? ts.sys.getEnvironmentVariable(name) : ""; },
getDirectories: function (path) { return ts.sys.getDirectories(path); },
realpath: realpath
};
}
ts.createCompilerHost = createCompilerHost;
function getPreEmitDiagnostics(program, sourceFile, cancellationToken) {
var diagnostics = program.getOptionsDiagnostics(cancellationToken).concat(program.getSyntacticDiagnostics(sourceFile, cancellationToken), program.getGlobalDiagnostics(cancellationToken), program.getSemanticDiagnostics(sourceFile, cancellationToken));
if (program.getCompilerOptions().declaration) {
ts.addRange(diagnostics, program.getDeclarationDiagnostics(sourceFile, cancellationToken));
}
return ts.sortAndDeduplicateDiagnostics(diagnostics);
}
ts.getPreEmitDiagnostics = getPreEmitDiagnostics;
function formatDiagnostics(diagnostics, host) {
var output = "";
for (var _i = 0, diagnostics_1 = diagnostics; _i < diagnostics_1.length; _i++) {
var diagnostic = diagnostics_1[_i];
output += formatDiagnostic(diagnostic, host);
}
return output;
}
ts.formatDiagnostics = formatDiagnostics;
function formatDiagnostic(diagnostic, host) {
var category = ts.DiagnosticCategory[diagnostic.category].toLowerCase();
var errorMessage = category + " TS" + diagnostic.code + ": " + flattenDiagnosticMessageText(diagnostic.messageText, host.getNewLine()) + host.getNewLine();
if (diagnostic.file) {
var _a = ts.getLineAndCharacterOfPosition(diagnostic.file, diagnostic.start), line = _a.line, character = _a.character;
var fileName = diagnostic.file.fileName;
var relativeFileName = ts.convertToRelativePath(fileName, host.getCurrentDirectory(), function (fileName) { return host.getCanonicalFileName(fileName); });
return relativeFileName + "(" + (line + 1) + "," + (character + 1) + "): " + errorMessage;
}
return errorMessage;
}
ts.formatDiagnostic = formatDiagnostic;
var redForegroundEscapeSequence = "\u001b[91m";
var yellowForegroundEscapeSequence = "\u001b[93m";
var blueForegroundEscapeSequence = "\u001b[93m";
var gutterStyleSequence = "\u001b[30;47m";
var gutterSeparator = " ";
var resetEscapeSequence = "\u001b[0m";
var ellipsis = "...";
function getCategoryFormat(category) {
switch (category) {
case ts.DiagnosticCategory.Warning: return yellowForegroundEscapeSequence;
case ts.DiagnosticCategory.Error: return redForegroundEscapeSequence;
case ts.DiagnosticCategory.Message: return blueForegroundEscapeSequence;
}
}
function formatAndReset(text, formatStyle) {
return formatStyle + text + resetEscapeSequence;
}
function padLeft(s, length) {
while (s.length < length) {
s = " " + s;
}
return s;
}
function formatDiagnosticsWithColorAndContext(diagnostics, host) {
var output = "";
for (var _i = 0, diagnostics_2 = diagnostics; _i < diagnostics_2.length; _i++) {
var diagnostic = diagnostics_2[_i];
var context = "";
if (diagnostic.file) {
var start = diagnostic.start, length_5 = diagnostic.length, file = diagnostic.file;
var _a = ts.getLineAndCharacterOfPosition(file, start), firstLine = _a.line, firstLineChar = _a.character;
var _b = ts.getLineAndCharacterOfPosition(file, start + length_5), lastLine = _b.line, lastLineChar = _b.character;
var lastLineInFile = ts.getLineAndCharacterOfPosition(file, file.text.length).line;
var relativeFileName = host ? ts.convertToRelativePath(file.fileName, host.getCurrentDirectory(), function (fileName) { return host.getCanonicalFileName(fileName); }) : file.fileName;
var hasMoreThanFiveLines = (lastLine - firstLine) >= 4;
var gutterWidth = (lastLine + 1 + "").length;
if (hasMoreThanFiveLines) {
gutterWidth = Math.max(ellipsis.length, gutterWidth);
}
context += host.getNewLine();
for (var i = firstLine; i <= lastLine; i++) {
if (hasMoreThanFiveLines && firstLine + 1 < i && i < lastLine - 1) {
context += formatAndReset(padLeft(ellipsis, gutterWidth), gutterStyleSequence) + gutterSeparator + host.getNewLine();
i = lastLine - 1;
}
var lineStart = ts.getPositionOfLineAndCharacter(file, i, 0);
var lineEnd = i < lastLineInFile ? ts.getPositionOfLineAndCharacter(file, i + 1, 0) : file.text.length;
var lineContent = file.text.slice(lineStart, lineEnd);
lineContent = lineContent.replace(/\s+$/g, "");
lineContent = lineContent.replace("\t", " ");
context += formatAndReset(padLeft(i + 1 + "", gutterWidth), gutterStyleSequence) + gutterSeparator;
context += lineContent + host.getNewLine();
context += formatAndReset(padLeft("", gutterWidth), gutterStyleSequence) + gutterSeparator;
context += redForegroundEscapeSequence;
if (i === firstLine) {
var lastCharForLine = i === lastLine ? lastLineChar : undefined;
context += lineContent.slice(0, firstLineChar).replace(/\S/g, " ");
context += lineContent.slice(firstLineChar, lastCharForLine).replace(/./g, "~");
}
else if (i === lastLine) {
context += lineContent.slice(0, lastLineChar).replace(/./g, "~");
}
else {
context += lineContent.replace(/./g, "~");
}
context += resetEscapeSequence;
}
output += host.getNewLine();
output += relativeFileName + "(" + (firstLine + 1) + "," + (firstLineChar + 1) + "): ";
}
var categoryColor = getCategoryFormat(diagnostic.category);
var category = ts.DiagnosticCategory[diagnostic.category].toLowerCase();
output += formatAndReset(category, categoryColor) + " TS" + diagnostic.code + ": " + flattenDiagnosticMessageText(diagnostic.messageText, host.getNewLine());
if (diagnostic.file) {
output += host.getNewLine();
output += context;
}
output += host.getNewLine();
}
return output;
}
ts.formatDiagnosticsWithColorAndContext = formatDiagnosticsWithColorAndContext;
function flattenDiagnosticMessageText(messageText, newLine) {
if (ts.isString(messageText)) {
return messageText;
}
else {
var diagnosticChain = messageText;
var result = "";
var indent = 0;
while (diagnosticChain) {
if (indent) {
result += newLine;
for (var i = 0; i < indent; i++) {
result += " ";
}
}
result += diagnosticChain.messageText;
indent++;
diagnosticChain = diagnosticChain.next;
}
return result;
}
}
ts.flattenDiagnosticMessageText = flattenDiagnosticMessageText;
function loadWithLocalCache(names, containingFile, loader) {
if (names.length === 0) {
return [];
}
var resolutions = [];
var cache = ts.createMap();
for (var _i = 0, names_1 = names; _i < names_1.length; _i++) {
var name = names_1[_i];
var result = void 0;
if (cache.has(name)) {
result = cache.get(name);
}
else {
cache.set(name, result = loader(name, containingFile));
}
resolutions.push(result);
}
return resolutions;
}
function isProgramUptoDate(program, rootFileNames, newOptions, getSourceVersion, fileExists, hasInvalidatedResolution, hasChangedAutomaticTypeDirectiveNames) {
if (!program || hasChangedAutomaticTypeDirectiveNames) {
return false;
}
if (program.getRootFileNames().length !== rootFileNames.length) {
return false;
}
if (program.getSourceFiles().some(sourceFileNotUptoDate)) {
return false;
}
if (program.getMissingFilePaths().some(fileExists)) {
return false;
}
var currentOptions = program.getCompilerOptions();
if (!ts.compareDataObjects(currentOptions, newOptions)) {
return false;
}
if (currentOptions.configFile && newOptions.configFile) {
return currentOptions.configFile.text === newOptions.configFile.text;
}
return true;
function sourceFileNotUptoDate(sourceFile) {
return sourceFile.version !== getSourceVersion(sourceFile.path) ||
hasInvalidatedResolution(sourceFile.path);
}
}
ts.isProgramUptoDate = isProgramUptoDate;
function shouldProgramCreateNewSourceFiles(program, newOptions) {
var oldOptions = program && program.getCompilerOptions();
return oldOptions && (oldOptions.target !== newOptions.target ||
oldOptions.module !== newOptions.module ||
oldOptions.moduleResolution !== newOptions.moduleResolution ||
oldOptions.noResolve !== newOptions.noResolve ||
oldOptions.jsx !== newOptions.jsx ||
oldOptions.allowJs !== newOptions.allowJs ||
oldOptions.disableSizeLimit !== newOptions.disableSizeLimit ||
oldOptions.baseUrl !== newOptions.baseUrl ||
!ts.equalOwnProperties(oldOptions.paths, newOptions.paths));
}
function createProgram(rootNames, options, host, oldProgram) {
var program;
var files = [];
var commonSourceDirectory;
var diagnosticsProducingTypeChecker;
var noDiagnosticsTypeChecker;
var classifiableNames;
var modifiedFilePaths;
var cachedSemanticDiagnosticsForFile = {};
var cachedDeclarationDiagnosticsForFile = {};
var resolvedTypeReferenceDirectives = ts.createMap();
var fileProcessingDiagnostics = ts.createDiagnosticCollection();
var maxNodeModuleJsDepth = typeof options.maxNodeModuleJsDepth === "number" ? options.maxNodeModuleJsDepth : 0;
var currentNodeModulesDepth = 0;
var modulesWithElidedImports = ts.createMap();
var sourceFilesFoundSearchingNodeModules = ts.createMap();
ts.performance.mark("beforeProgram");
host = host || createCompilerHost(options);
var skipDefaultLib = options.noLib;
var getDefaultLibraryFileName = ts.memoize(function () { return host.getDefaultLibFileName(options); });
var defaultLibraryPath = host.getDefaultLibLocation ? host.getDefaultLibLocation() : ts.getDirectoryPath(getDefaultLibraryFileName());
var programDiagnostics = ts.createDiagnosticCollection();
var currentDirectory = host.getCurrentDirectory();
var supportedExtensions = ts.getSupportedExtensions(options);
var hasEmitBlockingDiagnostics = ts.createMap();
var _compilerOptionsObjectLiteralSyntax;
var moduleResolutionCache;
var resolveModuleNamesWorker;
var hasInvalidatedResolution = host.hasInvalidatedResolution || ts.returnFalse;
if (host.resolveModuleNames) {
resolveModuleNamesWorker = function (moduleNames, containingFile, reusedNames) { return host.resolveModuleNames(checkAllDefined(moduleNames), containingFile, reusedNames).map(function (resolved) {
if (!resolved || resolved.extension !== undefined) {
return resolved;
}
var withExtension = ts.clone(resolved);
withExtension.extension = ts.extensionFromPath(resolved.resolvedFileName);
return withExtension;
}); };
}
else {
moduleResolutionCache = ts.createModuleResolutionCache(currentDirectory, function (x) { return host.getCanonicalFileName(x); });
var loader_1 = function (moduleName, containingFile) { return ts.resolveModuleName(moduleName, containingFile, options, host, moduleResolutionCache).resolvedModule; };
resolveModuleNamesWorker = function (moduleNames, containingFile) { return loadWithLocalCache(checkAllDefined(moduleNames), containingFile, loader_1); };
}
var resolveTypeReferenceDirectiveNamesWorker;
if (host.resolveTypeReferenceDirectives) {
resolveTypeReferenceDirectiveNamesWorker = function (typeDirectiveNames, containingFile) { return host.resolveTypeReferenceDirectives(checkAllDefined(typeDirectiveNames), containingFile); };
}
else {
var loader_2 = function (typesRef, containingFile) { return ts.resolveTypeReferenceDirective(typesRef, containingFile, options, host).resolvedTypeReferenceDirective; };
resolveTypeReferenceDirectiveNamesWorker = function (typeReferenceDirectiveNames, containingFile) { return loadWithLocalCache(checkAllDefined(typeReferenceDirectiveNames), containingFile, loader_2); };
}
var packageIdToSourceFile = ts.createMap();
var sourceFileToPackageName = ts.createMap();
var redirectTargetsSet = ts.createMap();
var filesByName = ts.createMap();
var missingFilePaths;
var filesByNameIgnoreCase = host.useCaseSensitiveFileNames() ? ts.createMap() : undefined;
var shouldCreateNewSourceFile = shouldProgramCreateNewSourceFiles(oldProgram, options);
var structuralIsReused = tryReuseStructureFromOldProgram();
if (structuralIsReused !== 2) {
ts.forEach(rootNames, function (name) { return processRootFile(name, false); });
var typeReferences = ts.getAutomaticTypeDirectiveNames(options, host);
if (typeReferences.length) {
var containingDirectory = options.configFilePath ? ts.getDirectoryPath(options.configFilePath) : host.getCurrentDirectory();
var containingFilename = ts.combinePaths(containingDirectory, "__inferred type names__.ts");
var resolutions = resolveTypeReferenceDirectiveNamesWorker(typeReferences, containingFilename);
for (var i = 0; i < typeReferences.length; i++) {
processTypeReferenceDirective(typeReferences[i], resolutions[i]);
}
}
if (!skipDefaultLib) {
if (!options.lib) {
processRootFile(getDefaultLibraryFileName(), true);
}
else {
ts.forEach(options.lib, function (libFileName) {
processRootFile(ts.combinePaths(defaultLibraryPath, libFileName), true);
});
}
}
missingFilePaths = ts.arrayFrom(filesByName.keys(), function (p) { return p; }).filter(function (p) { return !filesByName.get(p); });
}
ts.Debug.assert(!!missingFilePaths);
moduleResolutionCache = undefined;
if (oldProgram && host.onReleaseOldSourceFile) {
var oldSourceFiles = oldProgram.getSourceFiles();
for (var _i = 0, oldSourceFiles_1 = oldSourceFiles; _i < oldSourceFiles_1.length; _i++) {
var oldSourceFile = oldSourceFiles_1[_i];
if (!getSourceFile(oldSourceFile.path) || shouldCreateNewSourceFile) {
host.onReleaseOldSourceFile(oldSourceFile, oldProgram.getCompilerOptions());
}
}
}
oldProgram = undefined;
program = {
getRootFileNames: function () { return rootNames; },
getSourceFile: getSourceFile,
getSourceFileByPath: getSourceFileByPath,
getSourceFiles: function () { return files; },
getMissingFilePaths: function () { return missingFilePaths; },
getCompilerOptions: function () { return options; },
getSyntacticDiagnostics: getSyntacticDiagnostics,
getOptionsDiagnostics: getOptionsDiagnostics,
getGlobalDiagnostics: getGlobalDiagnostics,
getSemanticDiagnostics: getSemanticDiagnostics,
getDeclarationDiagnostics: getDeclarationDiagnostics,
getTypeChecker: getTypeChecker,
getClassifiableNames: getClassifiableNames,
getDiagnosticsProducingTypeChecker: getDiagnosticsProducingTypeChecker,
getCommonSourceDirectory: getCommonSourceDirectory,
emit: emit,
getCurrentDirectory: function () { return currentDirectory; },
getNodeCount: function () { return getDiagnosticsProducingTypeChecker().getNodeCount(); },
getIdentifierCount: function () { return getDiagnosticsProducingTypeChecker().getIdentifierCount(); },
getSymbolCount: function () { return getDiagnosticsProducingTypeChecker().getSymbolCount(); },
getTypeCount: function () { return getDiagnosticsProducingTypeChecker().getTypeCount(); },
getFileProcessingDiagnostics: function () { return fileProcessingDiagnostics; },
getResolvedTypeReferenceDirectives: function () { return resolvedTypeReferenceDirectives; },
isSourceFileFromExternalLibrary: isSourceFileFromExternalLibrary,
isSourceFileDefaultLibrary: isSourceFileDefaultLibrary,
dropDiagnosticsProducingTypeChecker: dropDiagnosticsProducingTypeChecker,
getSourceFileFromReference: getSourceFileFromReference,
sourceFileToPackageName: sourceFileToPackageName,
redirectTargetsSet: redirectTargetsSet
};
verifyCompilerOptions();
ts.performance.mark("afterProgram");
ts.performance.measure("Program", "beforeProgram", "afterProgram");
return program;
function toPath(fileName) {
return ts.toPath(fileName, currentDirectory, getCanonicalFileName);
}
function getCommonSourceDirectory() {
if (commonSourceDirectory === undefined) {
var emittedFiles = ts.filter(files, function (file) { return ts.sourceFileMayBeEmitted(file, options, isSourceFileFromExternalLibrary); });
if (options.rootDir && checkSourceFilesBelongToPath(emittedFiles, options.rootDir)) {
commonSourceDirectory = ts.getNormalizedAbsolutePath(options.rootDir, currentDirectory);
}
else {
commonSourceDirectory = computeCommonSourceDirectory(emittedFiles);
}
if (commonSourceDirectory && commonSourceDirectory[commonSourceDirectory.length - 1] !== ts.directorySeparator) {
commonSourceDirectory += ts.directorySeparator;
}
}
return commonSourceDirectory;
}
function getClassifiableNames() {
if (!classifiableNames) {
getTypeChecker();
classifiableNames = ts.createUnderscoreEscapedMap();
for (var _i = 0, files_2 = files; _i < files_2.length; _i++) {
var sourceFile = files_2[_i];
ts.copyEntries(sourceFile.classifiableNames, classifiableNames);
}
}
return classifiableNames;
}
function resolveModuleNamesReusingOldState(moduleNames, containingFile, file, oldProgramState) {
if (structuralIsReused === 0 && !file.ambientModuleNames.length) {
return resolveModuleNamesWorker(moduleNames, containingFile);
}
var oldSourceFile = oldProgramState.program && oldProgramState.program.getSourceFile(containingFile);
if (oldSourceFile !== file && file.resolvedModules) {
var result_4 = [];
for (var _i = 0, moduleNames_1 = moduleNames; _i < moduleNames_1.length; _i++) {
var moduleName = moduleNames_1[_i];
var resolvedModule = file.resolvedModules.get(moduleName);
result_4.push(resolvedModule);
}
return result_4;
}
var unknownModuleNames;
var result;
var reusedNames;
var predictedToResolveToAmbientModuleMarker = {};
for (var i = 0; i < moduleNames.length; i++) {
var moduleName = moduleNames[i];
if (file === oldSourceFile && !hasInvalidatedResolution(oldSourceFile.path)) {
var oldResolvedModule = oldSourceFile && oldSourceFile.resolvedModules.get(moduleName);
if (oldResolvedModule) {
if (ts.isTraceEnabled(options, host)) {
ts.trace(host, ts.Diagnostics.Reusing_resolution_of_module_0_to_file_1_from_old_program, moduleName, containingFile);
}
(result || (result = new Array(moduleNames.length)))[i] = oldResolvedModule;
(reusedNames || (reusedNames = [])).push(moduleName);
continue;
}
}
var resolvesToAmbientModuleInNonModifiedFile = false;
if (ts.contains(file.ambientModuleNames, moduleName)) {
resolvesToAmbientModuleInNonModifiedFile = true;
if (ts.isTraceEnabled(options, host)) {
ts.trace(host, ts.Diagnostics.Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1, moduleName, containingFile);
}
}
else {
resolvesToAmbientModuleInNonModifiedFile = moduleNameResolvesToAmbientModuleInNonModifiedFile(moduleName, oldProgramState);
}
if (resolvesToAmbientModuleInNonModifiedFile) {
(result || (result = new Array(moduleNames.length)))[i] = predictedToResolveToAmbientModuleMarker;
}
else {
(unknownModuleNames || (unknownModuleNames = [])).push(moduleName);
}
}
var resolutions = unknownModuleNames && unknownModuleNames.length
? resolveModuleNamesWorker(unknownModuleNames, containingFile, reusedNames)
: ts.emptyArray;
if (!result) {
ts.Debug.assert(resolutions.length === moduleNames.length);
return resolutions;
}
var j = 0;
for (var i = 0; i < result.length; i++) {
if (result[i]) {
if (result[i] === predictedToResolveToAmbientModuleMarker) {
result[i] = undefined;
}
}
else {
result[i] = resolutions[j];
j++;
}
}
ts.Debug.assert(j === resolutions.length);
return result;
function moduleNameResolvesToAmbientModuleInNonModifiedFile(moduleName, oldProgramState) {
var resolutionToFile = ts.getResolvedModule(oldProgramState.file, moduleName);
if (resolutionToFile) {
return false;
}
var ambientModule = oldProgramState.program && oldProgramState.program.getTypeChecker().tryFindAmbientModuleWithoutAugmentations(moduleName);
if (!(ambientModule && ambientModule.declarations)) {
return false;
}
var firstUnmodifiedFile = ts.forEach(ambientModule.declarations, function (d) {
var f = ts.getSourceFileOfNode(d);
return !ts.contains(oldProgramState.modifiedFilePaths, f.path) && f;
});
if (!firstUnmodifiedFile) {
return false;
}
if (ts.isTraceEnabled(options, host)) {
ts.trace(host, ts.Diagnostics.Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified, moduleName, firstUnmodifiedFile.fileName);
}
return true;
}
}
function tryReuseStructureFromOldProgram() {
if (!oldProgram) {
return 0;
}
var oldOptions = oldProgram.getCompilerOptions();
if (ts.changesAffectModuleResolution(oldOptions, options)) {
return oldProgram.structureIsReused = 0;
}
ts.Debug.assert(!(oldProgram.structureIsReused & (2 | 1)));
var oldRootNames = oldProgram.getRootFileNames();
if (!ts.arrayIsEqualTo(oldRootNames, rootNames)) {
return oldProgram.structureIsReused = 0;
}
if (!ts.arrayIsEqualTo(options.types, oldOptions.types)) {
return oldProgram.structureIsReused = 0;
}
var newSourceFiles = [];
var filePaths = [];
var modifiedSourceFiles = [];
oldProgram.structureIsReused = 2;
if (oldProgram.getMissingFilePaths().some(function (missingFilePath) { return host.fileExists(missingFilePath); })) {
return oldProgram.structureIsReused = 0;
}
var oldSourceFiles = oldProgram.getSourceFiles();
var seenPackageNames = ts.createMap();
for (var _i = 0, oldSourceFiles_2 = oldSourceFiles; _i < oldSourceFiles_2.length; _i++) {
var oldSourceFile = oldSourceFiles_2[_i];
var newSourceFile = host.getSourceFileByPath
? host.getSourceFileByPath(oldSourceFile.fileName, oldSourceFile.path, options.target, undefined, shouldCreateNewSourceFile)
: host.getSourceFile(oldSourceFile.fileName, options.target, undefined, shouldCreateNewSourceFile);
if (!newSourceFile) {
return oldProgram.structureIsReused = 0;
}
ts.Debug.assert(!newSourceFile.redirectInfo, "Host should not return a redirect source file from `getSourceFile`");
var fileChanged = void 0;
if (oldSourceFile.redirectInfo) {
if (newSourceFile !== oldSourceFile.redirectInfo.unredirected) {
return oldProgram.structureIsReused = 0;
}
fileChanged = false;
newSourceFile = oldSourceFile;
}
else if (oldProgram.redirectTargetsSet.has(oldSourceFile.path)) {
if (newSourceFile !== oldSourceFile) {
return oldProgram.structureIsReused = 0;
}
fileChanged = false;
}
else {
fileChanged = newSourceFile !== oldSourceFile;
}
newSourceFile.path = oldSourceFile.path;
filePaths.push(newSourceFile.path);
var packageName = oldProgram.sourceFileToPackageName.get(oldSourceFile.path);
if (packageName !== undefined) {
var prevKind = seenPackageNames.get(packageName);
var newKind = fileChanged ? 1 : 0;
if ((prevKind !== undefined && newKind === 1) || prevKind === 1) {
return oldProgram.structureIsReused = 0;
}
seenPackageNames.set(packageName, newKind);
}
if (fileChanged) {
if (oldSourceFile.hasNoDefaultLib !== newSourceFile.hasNoDefaultLib) {
oldProgram.structureIsReused = 1;
}
if (!ts.arrayIsEqualTo(oldSourceFile.referencedFiles, newSourceFile.referencedFiles, fileReferenceIsEqualTo)) {
oldProgram.structureIsReused = 1;
}
collectExternalModuleReferences(newSourceFile);
if (!ts.arrayIsEqualTo(oldSourceFile.imports, newSourceFile.imports, moduleNameIsEqualTo)) {
oldProgram.structureIsReused = 1;
}
if (!ts.arrayIsEqualTo(oldSourceFile.moduleAugmentations, newSourceFile.moduleAugmentations, moduleNameIsEqualTo)) {
oldProgram.structureIsReused = 1;
}
if ((oldSourceFile.flags & 524288) !== (newSourceFile.flags & 524288)) {
oldProgram.structureIsReused = 1;
}
if (!ts.arrayIsEqualTo(oldSourceFile.typeReferenceDirectives, newSourceFile.typeReferenceDirectives, fileReferenceIsEqualTo)) {
oldProgram.structureIsReused = 1;
}
modifiedSourceFiles.push({ oldFile: oldSourceFile, newFile: newSourceFile });
}
else if (hasInvalidatedResolution(oldSourceFile.path)) {
oldProgram.structureIsReused = 1;
modifiedSourceFiles.push({ oldFile: oldSourceFile, newFile: newSourceFile });
}
newSourceFiles.push(newSourceFile);
}
if (oldProgram.structureIsReused !== 2) {
return oldProgram.structureIsReused;
}
modifiedFilePaths = modifiedSourceFiles.map(function (f) { return f.newFile.path; });
for (var _a = 0, modifiedSourceFiles_1 = modifiedSourceFiles; _a < modifiedSourceFiles_1.length; _a++) {
var _b = modifiedSourceFiles_1[_a], oldSourceFile = _b.oldFile, newSourceFile = _b.newFile;
var newSourceFilePath = ts.getNormalizedAbsolutePath(newSourceFile.fileName, currentDirectory);
if (resolveModuleNamesWorker) {
var moduleNames = getModuleNames(newSourceFile);
var oldProgramState = { program: oldProgram, file: oldSourceFile, modifiedFilePaths: modifiedFilePaths };
var resolutions = resolveModuleNamesReusingOldState(moduleNames, newSourceFilePath, newSourceFile, oldProgramState);
var resolutionsChanged = ts.hasChangesInResolutions(moduleNames, resolutions, oldSourceFile.resolvedModules, ts.moduleResolutionIsEqualTo);
if (resolutionsChanged) {
oldProgram.structureIsReused = 1;
newSourceFile.resolvedModules = ts.zipToMap(moduleNames, resolutions);
}
else {
newSourceFile.resolvedModules = oldSourceFile.resolvedModules;
}
}
if (resolveTypeReferenceDirectiveNamesWorker) {
var typesReferenceDirectives = ts.map(newSourceFile.typeReferenceDirectives, function (x) { return x.fileName; });
var resolutions = resolveTypeReferenceDirectiveNamesWorker(typesReferenceDirectives, newSourceFilePath);
var resolutionsChanged = ts.hasChangesInResolutions(typesReferenceDirectives, resolutions, oldSourceFile.resolvedTypeReferenceDirectiveNames, ts.typeDirectiveIsEqualTo);
if (resolutionsChanged) {
oldProgram.structureIsReused = 1;
newSourceFile.resolvedTypeReferenceDirectiveNames = ts.zipToMap(typesReferenceDirectives, resolutions);
}
else {
newSourceFile.resolvedTypeReferenceDirectiveNames = oldSourceFile.resolvedTypeReferenceDirectiveNames;
}
}
}
if (oldProgram.structureIsReused !== 2) {
return oldProgram.structureIsReused;
}
if (host.hasChangedAutomaticTypeDirectiveNames) {
return oldProgram.structureIsReused = 1;
}
missingFilePaths = oldProgram.getMissingFilePaths();
for (var i = 0; i < newSourceFiles.length; i++) {
filesByName.set(filePaths[i], newSourceFiles[i]);
}
files = newSourceFiles;
fileProcessingDiagnostics = oldProgram.getFileProcessingDiagnostics();
for (var _c = 0, modifiedSourceFiles_2 = modifiedSourceFiles; _c < modifiedSourceFiles_2.length; _c++) {
var modifiedFile = modifiedSourceFiles_2[_c];
fileProcessingDiagnostics.reattachFileDiagnostics(modifiedFile.newFile);
}
resolvedTypeReferenceDirectives = oldProgram.getResolvedTypeReferenceDirectives();
sourceFileToPackageName = oldProgram.sourceFileToPackageName;
redirectTargetsSet = oldProgram.redirectTargetsSet;
return oldProgram.structureIsReused = 2;
}
function getEmitHost(writeFileCallback) {
return {
getCanonicalFileName: getCanonicalFileName,
getCommonSourceDirectory: program.getCommonSourceDirectory,
getCompilerOptions: program.getCompilerOptions,
getCurrentDirectory: function () { return currentDirectory; },
getNewLine: function () { return host.getNewLine(); },
getSourceFile: program.getSourceFile,
getSourceFileByPath: program.getSourceFileByPath,
getSourceFiles: program.getSourceFiles,
isSourceFileFromExternalLibrary: isSourceFileFromExternalLibrary,
writeFile: writeFileCallback || (function (fileName, data, writeByteOrderMark, onError, sourceFiles) { return host.writeFile(fileName, data, writeByteOrderMark, onError, sourceFiles); }),
isEmitBlocked: isEmitBlocked,
};
}
function isSourceFileFromExternalLibrary(file) {
return sourceFilesFoundSearchingNodeModules.get(file.path);
}
function isSourceFileDefaultLibrary(file) {
if (file.hasNoDefaultLib) {
return true;
}
if (!options.noLib) {
return false;
}
if (!options.lib) {
return ts.compareStrings(file.fileName, getDefaultLibraryFileName(), !host.useCaseSensitiveFileNames()) === 0;
}
else {
return ts.forEach(options.lib, function (libFileName) { return ts.compareStrings(file.fileName, ts.combinePaths(defaultLibraryPath, libFileName), !host.useCaseSensitiveFileNames()) === 0; });
}
}
function getDiagnosticsProducingTypeChecker() {
return diagnosticsProducingTypeChecker || (diagnosticsProducingTypeChecker = ts.createTypeChecker(program, true));
}
function dropDiagnosticsProducingTypeChecker() {
diagnosticsProducingTypeChecker = undefined;
}
function getTypeChecker() {
return noDiagnosticsTypeChecker || (noDiagnosticsTypeChecker = ts.createTypeChecker(program, false));
}
function emit(sourceFile, writeFileCallback, cancellationToken, emitOnlyDtsFiles, transformers) {
return runWithCancellationToken(function () { return emitWorker(program, sourceFile, writeFileCallback, cancellationToken, emitOnlyDtsFiles, transformers); });
}
function isEmitBlocked(emitFileName) {
return hasEmitBlockingDiagnostics.has(toPath(emitFileName));
}
function emitWorker(program, sourceFile, writeFileCallback, cancellationToken, emitOnlyDtsFiles, customTransformers) {
var declarationDiagnostics = [];
if (options.noEmit) {
return { diagnostics: declarationDiagnostics, sourceMaps: undefined, emittedFiles: undefined, emitSkipped: true };
}
if (options.noEmitOnError) {
var diagnostics = program.getOptionsDiagnostics(cancellationToken).concat(program.getSyntacticDiagnostics(sourceFile, cancellationToken), program.getGlobalDiagnostics(cancellationToken), program.getSemanticDiagnostics(sourceFile, cancellationToken));
if (diagnostics.length === 0 && program.getCompilerOptions().declaration) {
declarationDiagnostics = program.getDeclarationDiagnostics(undefined, cancellationToken);
}
if (diagnostics.length > 0 || declarationDiagnostics.length > 0) {
return {
diagnostics: ts.concatenate(diagnostics, declarationDiagnostics),
sourceMaps: undefined,
emittedFiles: undefined,
emitSkipped: true
};
}
}
var emitResolver = getDiagnosticsProducingTypeChecker().getEmitResolver((options.outFile || options.out) ? undefined : sourceFile);
ts.performance.mark("beforeEmit");
var transformers = emitOnlyDtsFiles ? [] : ts.getTransformers(options, customTransformers);
var emitResult = ts.emitFiles(emitResolver, getEmitHost(writeFileCallback), sourceFile, emitOnlyDtsFiles, transformers);
ts.performance.mark("afterEmit");
ts.performance.measure("Emit", "beforeEmit", "afterEmit");
return emitResult;
}
function getSourceFile(fileName) {
return getSourceFileByPath(toPath(fileName));
}
function getSourceFileByPath(path) {
return filesByName.get(path);
}
function getDiagnosticsHelper(sourceFile, getDiagnostics, cancellationToken) {
if (sourceFile) {
return getDiagnostics(sourceFile, cancellationToken);
}
return ts.sortAndDeduplicateDiagnostics(ts.flatMap(program.getSourceFiles(), function (sourceFile) {
if (cancellationToken) {
cancellationToken.throwIfCancellationRequested();
}
return getDiagnostics(sourceFile, cancellationToken);
}));
}
function getSyntacticDiagnostics(sourceFile, cancellationToken) {
return getDiagnosticsHelper(sourceFile, getSyntacticDiagnosticsForFile, cancellationToken);
}
function getSemanticDiagnostics(sourceFile, cancellationToken) {
return getDiagnosticsHelper(sourceFile, getSemanticDiagnosticsForFile, cancellationToken);
}
function getDeclarationDiagnostics(sourceFile, cancellationToken) {
var options = program.getCompilerOptions();
if (!sourceFile || options.out || options.outFile) {
return getDeclarationDiagnosticsWorker(sourceFile, cancellationToken);
}
else {
return getDiagnosticsHelper(sourceFile, getDeclarationDiagnosticsForFile, cancellationToken);
}
}
function getSyntacticDiagnosticsForFile(sourceFile) {
if (ts.isSourceFileJavaScript(sourceFile)) {
if (!sourceFile.additionalSyntacticDiagnostics) {
sourceFile.additionalSyntacticDiagnostics = getJavaScriptSyntacticDiagnosticsForFile(sourceFile);
if (ts.isCheckJsEnabledForFile(sourceFile, options)) {
sourceFile.additionalSyntacticDiagnostics = ts.concatenate(sourceFile.additionalSyntacticDiagnostics, sourceFile.jsDocDiagnostics);
}
}
return ts.concatenate(sourceFile.additionalSyntacticDiagnostics, sourceFile.parseDiagnostics);
}
return sourceFile.parseDiagnostics;
}
function runWithCancellationToken(func) {
try {
return func();
}
catch (e) {
if (e instanceof ts.OperationCanceledException) {
noDiagnosticsTypeChecker = undefined;
diagnosticsProducingTypeChecker = undefined;
}
throw e;
}
}
function getSemanticDiagnosticsForFile(sourceFile, cancellationToken) {
return getAndCacheDiagnostics(sourceFile, cancellationToken, cachedSemanticDiagnosticsForFile, getSemanticDiagnosticsForFileNoCache);
}
function getSemanticDiagnosticsForFileNoCache(sourceFile, cancellationToken) {
return runWithCancellationToken(function () {
if (options.skipLibCheck && sourceFile.isDeclarationFile || options.skipDefaultLibCheck && sourceFile.hasNoDefaultLib) {
return ts.emptyArray;
}
var typeChecker = getDiagnosticsProducingTypeChecker();
ts.Debug.assert(!!sourceFile.bindDiagnostics);
var includeBindAndCheckDiagnostics = sourceFile.scriptKind === 3 || sourceFile.scriptKind === 4 ||
sourceFile.scriptKind === 5 || ts.isCheckJsEnabledForFile(sourceFile, options);
var bindDiagnostics = includeBindAndCheckDiagnostics ? sourceFile.bindDiagnostics : ts.emptyArray;
var checkDiagnostics = includeBindAndCheckDiagnostics ? typeChecker.getDiagnostics(sourceFile, cancellationToken) : ts.emptyArray;
var fileProcessingDiagnosticsInFile = fileProcessingDiagnostics.getDiagnostics(sourceFile.fileName);
var programDiagnosticsInFile = programDiagnostics.getDiagnostics(sourceFile.fileName);
var diagnostics = bindDiagnostics.concat(checkDiagnostics, fileProcessingDiagnosticsInFile, programDiagnosticsInFile);
return ts.filter(diagnostics, shouldReportDiagnostic);
});
}
function shouldReportDiagnostic(diagnostic) {
var file = diagnostic.file, start = diagnostic.start;
if (file) {
var lineStarts = ts.getLineStarts(file);
var line = ts.computeLineAndCharacterOfPosition(lineStarts, start).line;
while (line > 0) {
var previousLineText = file.text.slice(lineStarts[line - 1], lineStarts[line]);
var result = ignoreDiagnosticCommentRegEx.exec(previousLineText);
if (!result) {
return true;
}
if (result[3]) {
return false;
}
line--;
}
}
return true;
}
function getJavaScriptSyntacticDiagnosticsForFile(sourceFile) {
return runWithCancellationToken(function () {
var diagnostics = [];
var parent = sourceFile;
walk(sourceFile);
return diagnostics;
function walk(node) {
switch (parent.kind) {
case 146:
case 149:
if (parent.questionToken === node) {
diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics._0_can_only_be_used_in_a_ts_file, "?"));
return;
}
case 151:
case 150:
case 152:
case 153:
case 154:
case 186:
case 228:
case 187:
case 226:
if (parent.type === node) {
diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.types_can_only_be_used_in_a_ts_file));
return;
}
}
switch (node.kind) {
case 237:
diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.import_can_only_be_used_in_a_ts_file));
return;
case 243:
if (node.isExportEquals) {
diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.export_can_only_be_used_in_a_ts_file));
return;
}
break;
case 259:
var heritageClause = node;
if (heritageClause.token === 108) {
diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.implements_clauses_can_only_be_used_in_a_ts_file));
return;
}
break;
case 230:
diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.interface_declarations_can_only_be_used_in_a_ts_file));
return;
case 233:
diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.module_declarations_can_only_be_used_in_a_ts_file));
return;
case 231:
diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.type_aliases_can_only_be_used_in_a_ts_file));
return;
case 232:
diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.enum_declarations_can_only_be_used_in_a_ts_file));
return;
case 203:
diagnostics.push(createDiagnosticForNode(node, ts.Diagnostics.non_null_assertions_can_only_be_used_in_a_ts_file));
return;
case 202:
diagnostics.push(createDiagnosticForNode(node.type, ts.Diagnostics.type_assertion_expressions_can_only_be_used_in_a_ts_file));
return;
case 184:
ts.Debug.fail();
}
var prevParent = parent;
parent = node;
ts.forEachChild(node, walk, walkArray);
parent = prevParent;
}
function walkArray(nodes) {
if (parent.decorators === nodes && !options.experimentalDecorators) {
diagnostics.push(createDiagnosticForNode(parent, ts.Diagnostics.Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_the_experimentalDecorators_option_to_remove_this_warning));
}
switch (parent.kind) {
case 229:
case 151:
case 150:
case 152:
case 153:
case 154:
case 186:
case 228:
case 187:
if (nodes === parent.typeParameters) {
diagnostics.push(createDiagnosticForNodeArray(nodes, ts.Diagnostics.type_parameter_declarations_can_only_be_used_in_a_ts_file));
return;
}
case 208:
if (nodes === parent.modifiers) {
return checkModifiers(nodes, parent.kind === 208);
}
break;
case 149:
if (nodes === parent.modifiers) {
for (var _i = 0, _a = nodes; _i < _a.length; _i++) {
var modifier = _a[_i];
if (modifier.kind !== 115) {
diagnostics.push(createDiagnosticForNode(modifier, ts.Diagnostics._0_can_only_be_used_in_a_ts_file, ts.tokenToString(modifier.kind)));
}
}
return;
}
break;
case 146:
if (nodes === parent.modifiers) {
diagnostics.push(createDiagnosticForNodeArray(nodes, ts.Diagnostics.parameter_modifiers_can_only_be_used_in_a_ts_file));
return;
}
break;
case 181:
case 182:
case 201:
if (nodes === parent.typeArguments) {
diagnostics.push(createDiagnosticForNodeArray(nodes, ts.Diagnostics.type_arguments_can_only_be_used_in_a_ts_file));
return;
}
break;
}
for (var _b = 0, nodes_8 = nodes; _b < nodes_8.length; _b++) {
var node = nodes_8[_b];
walk(node);
}
}
function checkModifiers(modifiers, isConstValid) {
for (var _i = 0, modifiers_1 = modifiers; _i < modifiers_1.length; _i++) {
var modifier = modifiers_1[_i];
switch (modifier.kind) {
case 76:
if (isConstValid) {
continue;
}
case 114:
case 112:
case 113:
case 131:
case 124:
case 117:
diagnostics.push(createDiagnosticForNode(modifier, ts.Diagnostics._0_can_only_be_used_in_a_ts_file, ts.tokenToString(modifier.kind)));
break;
case 115:
case 84:
case 79:
}
}
}
function createDiagnosticForNodeArray(nodes, message, arg0, arg1, arg2) {
var start = nodes.pos;
return ts.createFileDiagnostic(sourceFile, start, nodes.end - start, message, arg0, arg1, arg2);
}
function createDiagnosticForNode(node, message, arg0, arg1, arg2) {
return ts.createDiagnosticForNodeInSourceFile(sourceFile, node, message, arg0, arg1, arg2);
}
});
}
function getDeclarationDiagnosticsWorker(sourceFile, cancellationToken) {
return getAndCacheDiagnostics(sourceFile, cancellationToken, cachedDeclarationDiagnosticsForFile, getDeclarationDiagnosticsForFileNoCache);
}
function getDeclarationDiagnosticsForFileNoCache(sourceFile, cancellationToken) {
return runWithCancellationToken(function () {
var resolver = getDiagnosticsProducingTypeChecker().getEmitResolver(sourceFile, cancellationToken);
return ts.getDeclarationDiagnostics(getEmitHost(ts.noop), resolver, sourceFile);
});
}
function getAndCacheDiagnostics(sourceFile, cancellationToken, cache, getDiagnostics) {
var cachedResult = sourceFile
? cache.perFile && cache.perFile.get(sourceFile.path)
: cache.allDiagnostics;
if (cachedResult) {
return cachedResult;
}
var result = getDiagnostics(sourceFile, cancellationToken) || ts.emptyArray;
if (sourceFile) {
if (!cache.perFile) {
cache.perFile = ts.createMap();
}
cache.perFile.set(sourceFile.path, result);
}
else {
cache.allDiagnostics = result;
}
return result;
}
function getDeclarationDiagnosticsForFile(sourceFile, cancellationToken) {
return sourceFile.isDeclarationFile ? [] : getDeclarationDiagnosticsWorker(sourceFile, cancellationToken);
}
function getOptionsDiagnostics() {
return ts.sortAndDeduplicateDiagnostics(ts.concatenate(fileProcessingDiagnostics.getGlobalDiagnostics(), ts.concatenate(programDiagnostics.getGlobalDiagnostics(), options.configFile ? programDiagnostics.getDiagnostics(options.configFile.fileName) : [])));
}
function getGlobalDiagnostics() {
return ts.sortAndDeduplicateDiagnostics(getDiagnosticsProducingTypeChecker().getGlobalDiagnostics().slice());
}
function processRootFile(fileName, isDefaultLib) {
processSourceFile(ts.normalizePath(fileName), isDefaultLib, undefined);
}
function fileReferenceIsEqualTo(a, b) {
return a.fileName === b.fileName;
}
function moduleNameIsEqualTo(a, b) {
return a.kind === 9
? b.kind === 9 && a.text === b.text
: b.kind === 71 && a.escapedText === b.escapedText;
}
function collectExternalModuleReferences(file) {
if (file.imports) {
return;
}
var isJavaScriptFile = ts.isSourceFileJavaScript(file);
var isExternalModuleFile = ts.isExternalModule(file);
var imports;
var moduleAugmentations;
var ambientModules;
if (options.importHelpers
&& (options.isolatedModules || isExternalModuleFile)
&& !file.isDeclarationFile) {
var externalHelpersModuleReference = ts.createLiteral(ts.externalHelpersModuleNameText);
var importDecl = ts.createImportDeclaration(undefined, undefined, undefined);
externalHelpersModuleReference.parent = importDecl;
importDecl.parent = file;
imports = [externalHelpersModuleReference];
}
for (var _i = 0, _a = file.statements; _i < _a.length; _i++) {
var node = _a[_i];
collectModuleReferences(node, false);
if ((file.flags & 524288) || isJavaScriptFile) {
collectDynamicImportOrRequireCalls(node);
}
}
file.imports = imports || ts.emptyArray;
file.moduleAugmentations = moduleAugmentations || ts.emptyArray;
file.ambientModuleNames = ambientModules || ts.emptyArray;
return;
function collectModuleReferences(node, inAmbientModule) {
switch (node.kind) {
case 238:
case 237:
case 244:
var moduleNameExpr = ts.getExternalModuleName(node);
if (!moduleNameExpr || !ts.isStringLiteral(moduleNameExpr)) {
break;
}
if (!moduleNameExpr.text) {
break;
}
if (!inAmbientModule || !ts.isExternalModuleNameRelative(moduleNameExpr.text)) {
(imports || (imports = [])).push(moduleNameExpr);
}
break;
case 233:
if (ts.isAmbientModule(node) && (inAmbientModule || ts.hasModifier(node, 2) || file.isDeclarationFile)) {
var moduleName = node.name;
var nameText = ts.getTextOfIdentifierOrLiteral(moduleName);
if (isExternalModuleFile || (inAmbientModule && !ts.isExternalModuleNameRelative(nameText))) {
(moduleAugmentations || (moduleAugmentations = [])).push(moduleName);
}
else if (!inAmbientModule) {
if (file.isDeclarationFile) {
(ambientModules || (ambientModules = [])).push(nameText);
}
var body = node.body;
if (body) {
for (var _i = 0, _a = body.statements; _i < _a.length; _i++) {
var statement = _a[_i];
collectModuleReferences(statement, true);
}
}
}
}
}
}
function collectDynamicImportOrRequireCalls(node) {
if (ts.isRequireCall(node, true)) {
(imports || (imports = [])).push(node.arguments[0]);
}
else if (ts.isImportCall(node) && node.arguments.length === 1 && node.arguments[0].kind === 9) {
(imports || (imports = [])).push(node.arguments[0]);
}
else {
ts.forEachChild(node, collectDynamicImportOrRequireCalls);
}
}
}
function getSourceFileFromReference(referencingFile, ref) {
return getSourceFileFromReferenceWorker(resolveTripleslashReference(ref.fileName, referencingFile.fileName), function (fileName) { return filesByName.get(toPath(fileName)); });
}
function getSourceFileFromReferenceWorker(fileName, getSourceFile, fail, refFile) {
if (ts.hasExtension(fileName)) {
if (!options.allowNonTsExtensions && !ts.forEach(supportedExtensions, function (extension) { return ts.fileExtensionIs(host.getCanonicalFileName(fileName), extension); })) {
if (fail)
fail(ts.Diagnostics.File_0_has_unsupported_extension_The_only_supported_extensions_are_1, fileName, "'" + supportedExtensions.join("', '") + "'");
return undefined;
}
var sourceFile = getSourceFile(fileName);
if (fail) {
if (!sourceFile) {
fail(ts.Diagnostics.File_0_not_found, fileName);
}
else if (refFile && host.getCanonicalFileName(fileName) === host.getCanonicalFileName(refFile.fileName)) {
fail(ts.Diagnostics.A_file_cannot_have_a_reference_to_itself);
}
}
return sourceFile;
}
else {
var sourceFileNoExtension = options.allowNonTsExtensions && getSourceFile(fileName);
if (sourceFileNoExtension)
return sourceFileNoExtension;
if (fail && options.allowNonTsExtensions) {
fail(ts.Diagnostics.File_0_not_found, fileName);
return undefined;
}
var sourceFileWithAddedExtension = ts.forEach(supportedExtensions, function (extension) { return getSourceFile(fileName + extension); });
if (fail && !sourceFileWithAddedExtension)
fail(ts.Diagnostics.File_0_not_found, fileName + ".ts");
return sourceFileWithAddedExtension;
}
}
function processSourceFile(fileName, isDefaultLib, packageId, refFile, refPos, refEnd) {
getSourceFileFromReferenceWorker(fileName, function (fileName) { return findSourceFile(fileName, toPath(fileName), isDefaultLib, refFile, refPos, refEnd, packageId); }, function (diagnostic) {
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
fileProcessingDiagnostics.add(refFile !== undefined && refEnd !== undefined && refPos !== undefined
? ts.createFileDiagnostic.apply(void 0, [refFile, refPos, refEnd - refPos, diagnostic].concat(args)) : ts.createCompilerDiagnostic.apply(void 0, [diagnostic].concat(args)));
}, refFile);
}
function reportFileNamesDifferOnlyInCasingError(fileName, existingFileName, refFile, refPos, refEnd) {
if (refFile !== undefined && refPos !== undefined && refEnd !== undefined) {
fileProcessingDiagnostics.add(ts.createFileDiagnostic(refFile, refPos, refEnd - refPos, ts.Diagnostics.File_name_0_differs_from_already_included_file_name_1_only_in_casing, fileName, existingFileName));
}
else {
fileProcessingDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.File_name_0_differs_from_already_included_file_name_1_only_in_casing, fileName, existingFileName));
}
}
function createRedirectSourceFile(redirectTarget, unredirected, fileName, path) {
var redirect = Object.create(redirectTarget);
redirect.fileName = fileName;
redirect.path = path;
redirect.redirectInfo = { redirectTarget: redirectTarget, unredirected: unredirected };
Object.defineProperties(redirect, {
id: {
get: function () { return this.redirectInfo.redirectTarget.id; },
set: function (value) { this.redirectInfo.redirectTarget.id = value; },
},
symbol: {
get: function () { return this.redirectInfo.redirectTarget.symbol; },
set: function (value) { this.redirectInfo.redirectTarget.symbol = value; },
},
});
return redirect;
}
function findSourceFile(fileName, path, isDefaultLib, refFile, refPos, refEnd, packageId) {
if (filesByName.has(path)) {
var file_1 = filesByName.get(path);
if (file_1 && options.forceConsistentCasingInFileNames && ts.getNormalizedAbsolutePath(file_1.fileName, currentDirectory) !== ts.getNormalizedAbsolutePath(fileName, currentDirectory)) {
reportFileNamesDifferOnlyInCasingError(fileName, file_1.fileName, refFile, refPos, refEnd);
}
if (file_1 && sourceFilesFoundSearchingNodeModules.get(file_1.path) && currentNodeModulesDepth === 0) {
sourceFilesFoundSearchingNodeModules.set(file_1.path, false);
if (!options.noResolve) {
processReferencedFiles(file_1, isDefaultLib);
processTypeReferenceDirectives(file_1);
}
modulesWithElidedImports.set(file_1.path, false);
processImportedModules(file_1);
}
else if (file_1 && modulesWithElidedImports.get(file_1.path)) {
if (currentNodeModulesDepth < maxNodeModuleJsDepth) {
modulesWithElidedImports.set(file_1.path, false);
processImportedModules(file_1);
}
}
return file_1;
}
var file = host.getSourceFile(fileName, options.target, function (hostErrorMessage) {
if (refFile !== undefined && refPos !== undefined && refEnd !== undefined) {
fileProcessingDiagnostics.add(ts.createFileDiagnostic(refFile, refPos, refEnd - refPos, ts.Diagnostics.Cannot_read_file_0_Colon_1, fileName, hostErrorMessage));
}
else {
fileProcessingDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_read_file_0_Colon_1, fileName, hostErrorMessage));
}
}, shouldCreateNewSourceFile);
if (packageId) {
var packageIdKey = packageId.name + "/" + packageId.subModuleName + "@" + packageId.version;
var fileFromPackageId = packageIdToSourceFile.get(packageIdKey);
if (fileFromPackageId) {
var dupFile = createRedirectSourceFile(fileFromPackageId, file, fileName, path);
redirectTargetsSet.set(fileFromPackageId.path, true);
filesByName.set(path, dupFile);
sourceFileToPackageName.set(path, packageId.name);
files.push(dupFile);
return dupFile;
}
else if (file) {
packageIdToSourceFile.set(packageIdKey, file);
sourceFileToPackageName.set(path, packageId.name);
}
}
filesByName.set(path, file);
if (file) {
sourceFilesFoundSearchingNodeModules.set(path, currentNodeModulesDepth > 0);
file.path = path;
if (host.useCaseSensitiveFileNames()) {
var pathLowerCase = path.toLowerCase();
var existingFile = filesByNameIgnoreCase.get(pathLowerCase);
if (existingFile) {
reportFileNamesDifferOnlyInCasingError(fileName, existingFile.fileName, refFile, refPos, refEnd);
}
else {
filesByNameIgnoreCase.set(pathLowerCase, file);
}
}
skipDefaultLib = skipDefaultLib || file.hasNoDefaultLib;
if (!options.noResolve) {
processReferencedFiles(file, isDefaultLib);
processTypeReferenceDirectives(file);
}
processImportedModules(file);
if (isDefaultLib) {
files.unshift(file);
}
else {
files.push(file);
}
}
return file;
}
function processReferencedFiles(file, isDefaultLib) {
ts.forEach(file.referencedFiles, function (ref) {
var referencedFileName = resolveTripleslashReference(ref.fileName, file.fileName);
processSourceFile(referencedFileName, isDefaultLib, undefined, file, ref.pos, ref.end);
});
}
function processTypeReferenceDirectives(file) {
var typeDirectives = ts.map(file.typeReferenceDirectives, function (ref) { return ref.fileName.toLocaleLowerCase(); });
var resolutions = resolveTypeReferenceDirectiveNamesWorker(typeDirectives, file.fileName);
for (var i = 0; i < typeDirectives.length; i++) {
var ref = file.typeReferenceDirectives[i];
var resolvedTypeReferenceDirective = resolutions[i];
var fileName = ref.fileName.toLocaleLowerCase();
ts.setResolvedTypeReferenceDirective(file, fileName, resolvedTypeReferenceDirective);
processTypeReferenceDirective(fileName, resolvedTypeReferenceDirective, file, ref.pos, ref.end);
}
}
function processTypeReferenceDirective(typeReferenceDirective, resolvedTypeReferenceDirective, refFile, refPos, refEnd) {
var previousResolution = resolvedTypeReferenceDirectives.get(typeReferenceDirective);
if (previousResolution && previousResolution.primary) {
return;
}
var saveResolution = true;
if (resolvedTypeReferenceDirective) {
if (resolvedTypeReferenceDirective.primary) {
processSourceFile(resolvedTypeReferenceDirective.resolvedFileName, false, resolvedTypeReferenceDirective.packageId, refFile, refPos, refEnd);
}
else {
if (previousResolution) {
if (resolvedTypeReferenceDirective.resolvedFileName !== previousResolution.resolvedFileName) {
var otherFileText = host.readFile(resolvedTypeReferenceDirective.resolvedFileName);
if (otherFileText !== getSourceFile(previousResolution.resolvedFileName).text) {
fileProcessingDiagnostics.add(createDiagnostic(refFile, refPos, refEnd, ts.Diagnostics.Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_library_to_resolve_the_conflict, typeReferenceDirective, resolvedTypeReferenceDirective.resolvedFileName, previousResolution.resolvedFileName));
}
}
saveResolution = false;
}
else {
processSourceFile(resolvedTypeReferenceDirective.resolvedFileName, false, resolvedTypeReferenceDirective.packageId, refFile, refPos, refEnd);
}
}
}
else {
fileProcessingDiagnostics.add(createDiagnostic(refFile, refPos, refEnd, ts.Diagnostics.Cannot_find_type_definition_file_for_0, typeReferenceDirective));
}
if (saveResolution) {
resolvedTypeReferenceDirectives.set(typeReferenceDirective, resolvedTypeReferenceDirective);
}
}
function createDiagnostic(refFile, refPos, refEnd, message) {
var args = [];
for (var _i = 4; _i < arguments.length; _i++) {
args[_i - 4] = arguments[_i];
}
if (refFile === undefined || refPos === undefined || refEnd === undefined) {
return ts.createCompilerDiagnostic.apply(void 0, [message].concat(args));
}
else {
return ts.createFileDiagnostic.apply(void 0, [refFile, refPos, refEnd - refPos, message].concat(args));
}
}
function getCanonicalFileName(fileName) {
return host.getCanonicalFileName(fileName);
}
function processImportedModules(file) {
collectExternalModuleReferences(file);
if (file.imports.length || file.moduleAugmentations.length) {
var moduleNames = getModuleNames(file);
var oldProgramState = { program: oldProgram, file: file, modifiedFilePaths: modifiedFilePaths };
var resolutions = resolveModuleNamesReusingOldState(moduleNames, ts.getNormalizedAbsolutePath(file.fileName, currentDirectory), file, oldProgramState);
ts.Debug.assert(resolutions.length === moduleNames.length);
for (var i = 0; i < moduleNames.length; i++) {
var resolution = resolutions[i];
ts.setResolvedModule(file, moduleNames[i], resolution);
if (!resolution) {
continue;
}
var isFromNodeModulesSearch = resolution.isExternalLibraryImport;
var isJsFile = !ts.extensionIsTypeScript(resolution.extension);
var isJsFileFromNodeModules = isFromNodeModulesSearch && isJsFile;
var resolvedFileName = resolution.resolvedFileName;
if (isFromNodeModulesSearch) {
currentNodeModulesDepth++;
}
var elideImport = isJsFileFromNodeModules && currentNodeModulesDepth > maxNodeModuleJsDepth;
var shouldAddFile = resolvedFileName
&& !getResolutionDiagnostic(options, resolution)
&& !options.noResolve
&& i < file.imports.length
&& !elideImport
&& !(isJsFile && !options.allowJs);
if (elideImport) {
modulesWithElidedImports.set(file.path, true);
}
else if (shouldAddFile) {
var path = toPath(resolvedFileName);
var pos = ts.skipTrivia(file.text, file.imports[i].pos);
findSourceFile(resolvedFileName, path, false, file, pos, file.imports[i].end, resolution.packageId);
}
if (isFromNodeModulesSearch) {
currentNodeModulesDepth--;
}
}
}
else {
file.resolvedModules = undefined;
}
}
function computeCommonSourceDirectory(sourceFiles) {
var fileNames = [];
for (var _i = 0, sourceFiles_2 = sourceFiles; _i < sourceFiles_2.length; _i++) {
var file = sourceFiles_2[_i];
if (!file.isDeclarationFile) {
fileNames.push(file.fileName);
}
}
return computeCommonSourceDirectoryOfFilenames(fileNames, currentDirectory, getCanonicalFileName);
}
function checkSourceFilesBelongToPath(sourceFiles, rootDirectory) {
var allFilesBelongToPath = true;
if (sourceFiles) {
var absoluteRootDirectoryPath = host.getCanonicalFileName(ts.getNormalizedAbsolutePath(rootDirectory, currentDirectory));
for (var _i = 0, sourceFiles_3 = sourceFiles; _i < sourceFiles_3.length; _i++) {
var sourceFile = sourceFiles_3[_i];
if (!sourceFile.isDeclarationFile) {
var absoluteSourceFilePath = host.getCanonicalFileName(ts.getNormalizedAbsolutePath(sourceFile.fileName, currentDirectory));
if (absoluteSourceFilePath.indexOf(absoluteRootDirectoryPath) !== 0) {
programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files, sourceFile.fileName, options.rootDir));
allFilesBelongToPath = false;
}
}
}
}
return allFilesBelongToPath;
}
function verifyCompilerOptions() {
if (options.isolatedModules) {
if (options.declaration) {
createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "declaration", "isolatedModules");
}
if (options.noEmitOnError) {
createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "noEmitOnError", "isolatedModules");
}
if (options.out) {
createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "out", "isolatedModules");
}
if (options.outFile) {
createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "outFile", "isolatedModules");
}
}
if (options.inlineSourceMap) {
if (options.sourceMap) {
createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "sourceMap", "inlineSourceMap");
}
if (options.mapRoot) {
createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "mapRoot", "inlineSourceMap");
}
}
if (options.paths && options.baseUrl === undefined) {
createDiagnosticForOptionName(ts.Diagnostics.Option_paths_cannot_be_used_without_specifying_baseUrl_option, "paths");
}
if (options.paths) {
for (var key in options.paths) {
if (!ts.hasProperty(options.paths, key)) {
continue;
}
if (!ts.hasZeroOrOneAsteriskCharacter(key)) {
createDiagnosticForOptionPaths(true, key, ts.Diagnostics.Pattern_0_can_have_at_most_one_Asterisk_character, key);
}
if (ts.isArray(options.paths[key])) {
var len = options.paths[key].length;
if (len === 0) {
createDiagnosticForOptionPaths(false, key, ts.Diagnostics.Substitutions_for_pattern_0_shouldn_t_be_an_empty_array, key);
}
for (var i = 0; i < len; i++) {
var subst = options.paths[key][i];
var typeOfSubst = typeof subst;
if (typeOfSubst === "string") {
if (!ts.hasZeroOrOneAsteriskCharacter(subst)) {
createDiagnosticForOptionPathKeyValue(key, i, ts.Diagnostics.Substitution_0_in_pattern_1_in_can_have_at_most_one_Asterisk_character, subst, key);
}
}
else {
createDiagnosticForOptionPathKeyValue(key, i, ts.Diagnostics.Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2, subst, key, typeOfSubst);
}
}
}
else {
createDiagnosticForOptionPaths(false, key, ts.Diagnostics.Substitutions_for_pattern_0_should_be_an_array, key);
}
}
}
if (!options.sourceMap && !options.inlineSourceMap) {
if (options.inlineSources) {
createDiagnosticForOptionName(ts.Diagnostics.Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided, "inlineSources");
}
if (options.sourceRoot) {
createDiagnosticForOptionName(ts.Diagnostics.Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided, "sourceRoot");
}
}
if (options.out && options.outFile) {
createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "out", "outFile");
}
if (options.mapRoot && !options.sourceMap) {
createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "mapRoot", "sourceMap");
}
if (options.declarationDir) {
if (!options.declaration) {
createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "declarationDir", "declaration");
}
if (options.out || options.outFile) {
createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "declarationDir", options.out ? "out" : "outFile");
}
}
if (options.lib && options.noLib) {
createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "lib", "noLib");
}
if (options.noImplicitUseStrict && (options.alwaysStrict === undefined ? options.strict : options.alwaysStrict)) {
createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "noImplicitUseStrict", "alwaysStrict");
}
var languageVersion = options.target || 0;
var outFile = options.outFile || options.out;
var firstNonAmbientExternalModuleSourceFile = ts.forEach(files, function (f) { return ts.isExternalModule(f) && !f.isDeclarationFile ? f : undefined; });
if (options.isolatedModules) {
if (options.module === ts.ModuleKind.None && languageVersion < 2) {
createDiagnosticForOptionName(ts.Diagnostics.Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES2015_or_higher, "isolatedModules", "target");
}
var firstNonExternalModuleSourceFile = ts.forEach(files, function (f) { return !ts.isExternalModule(f) && !f.isDeclarationFile ? f : undefined; });
if (firstNonExternalModuleSourceFile) {
var span_7 = ts.getErrorSpanForNode(firstNonExternalModuleSourceFile, firstNonExternalModuleSourceFile);
programDiagnostics.add(ts.createFileDiagnostic(firstNonExternalModuleSourceFile, span_7.start, span_7.length, ts.Diagnostics.Cannot_compile_namespaces_when_the_isolatedModules_flag_is_provided));
}
}
else if (firstNonAmbientExternalModuleSourceFile && languageVersion < 2 && options.module === ts.ModuleKind.None) {
var span_8 = ts.getErrorSpanForNode(firstNonAmbientExternalModuleSourceFile, firstNonAmbientExternalModuleSourceFile.externalModuleIndicator);
programDiagnostics.add(ts.createFileDiagnostic(firstNonAmbientExternalModuleSourceFile, span_8.start, span_8.length, ts.Diagnostics.Cannot_use_imports_exports_or_module_augmentations_when_module_is_none));
}
if (outFile) {
if (options.module && !(options.module === ts.ModuleKind.AMD || options.module === ts.ModuleKind.System)) {
createDiagnosticForOptionName(ts.Diagnostics.Only_amd_and_system_modules_are_supported_alongside_0, options.out ? "out" : "outFile", "module");
}
else if (options.module === undefined && firstNonAmbientExternalModuleSourceFile) {
var span_9 = ts.getErrorSpanForNode(firstNonAmbientExternalModuleSourceFile, firstNonAmbientExternalModuleSourceFile.externalModuleIndicator);
programDiagnostics.add(ts.createFileDiagnostic(firstNonAmbientExternalModuleSourceFile, span_9.start, span_9.length, ts.Diagnostics.Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system, options.out ? "out" : "outFile"));
}
}
if (options.outDir ||
options.sourceRoot ||
options.mapRoot) {
var dir = getCommonSourceDirectory();
if (options.outDir && dir === "" && ts.forEach(files, function (file) { return ts.getRootLength(file.fileName) > 1; })) {
createDiagnosticForOptionName(ts.Diagnostics.Cannot_find_the_common_subdirectory_path_for_the_input_files, "outDir");
}
}
if (!options.noEmit && options.allowJs && options.declaration) {
createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "allowJs", "declaration");
}
if (options.checkJs && !options.allowJs) {
programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "checkJs", "allowJs"));
}
if (options.emitDecoratorMetadata &&
!options.experimentalDecorators) {
createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "emitDecoratorMetadata", "experimentalDecorators");
}
if (options.jsxFactory) {
if (options.reactNamespace) {
createDiagnosticForOptionName(ts.Diagnostics.Option_0_cannot_be_specified_with_option_1, "reactNamespace", "jsxFactory");
}
if (!ts.parseIsolatedEntityName(options.jsxFactory, languageVersion)) {
createOptionValueDiagnostic("jsxFactory", ts.Diagnostics.Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name, options.jsxFactory);
}
}
else if (options.reactNamespace && !ts.isIdentifierText(options.reactNamespace, languageVersion)) {
createOptionValueDiagnostic("reactNamespace", ts.Diagnostics.Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier, options.reactNamespace);
}
if (!options.noEmit && !options.suppressOutputPathCheck) {
var emitHost = getEmitHost();
var emitFilesSeen_1 = ts.createMap();
ts.forEachEmittedFile(emitHost, function (emitFileNames) {
verifyEmitFilePath(emitFileNames.jsFilePath, emitFilesSeen_1);
verifyEmitFilePath(emitFileNames.declarationFilePath, emitFilesSeen_1);
});
}
function verifyEmitFilePath(emitFileName, emitFilesSeen) {
if (emitFileName) {
var emitFilePath = toPath(emitFileName);
if (filesByName.has(emitFilePath)) {
var chain_1;
if (!options.configFilePath) {
chain_1 = ts.chainDiagnosticMessages(undefined, ts.Diagnostics.Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript_files_Learn_more_at_https_Colon_Slash_Slashaka_ms_Slashtsconfig);
}
chain_1 = ts.chainDiagnosticMessages(chain_1, ts.Diagnostics.Cannot_write_file_0_because_it_would_overwrite_input_file, emitFileName);
blockEmittingOfFile(emitFileName, ts.createCompilerDiagnosticFromMessageChain(chain_1));
}
var emitFileKey = !host.useCaseSensitiveFileNames() ? emitFilePath.toLocaleLowerCase() : emitFilePath;
if (emitFilesSeen.has(emitFileKey)) {
blockEmittingOfFile(emitFileName, ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files, emitFileName));
}
else {
emitFilesSeen.set(emitFileKey, true);
}
}
}
}
function createDiagnosticForOptionPathKeyValue(key, valueIndex, message, arg0, arg1, arg2) {
var needCompilerDiagnostic = true;
var pathsSyntax = getOptionPathsSyntax();
for (var _i = 0, pathsSyntax_1 = pathsSyntax; _i < pathsSyntax_1.length; _i++) {
var pathProp = pathsSyntax_1[_i];
if (ts.isObjectLiteralExpression(pathProp.initializer)) {
for (var _a = 0, _b = ts.getPropertyAssignment(pathProp.initializer, key); _a < _b.length; _a++) {
var keyProps = _b[_a];
if (ts.isArrayLiteralExpression(keyProps.initializer) &&
keyProps.initializer.elements.length > valueIndex) {
programDiagnostics.add(ts.createDiagnosticForNodeInSourceFile(options.configFile, keyProps.initializer.elements[valueIndex], message, arg0, arg1, arg2));
needCompilerDiagnostic = false;
}
}
}
}
if (needCompilerDiagnostic) {
programDiagnostics.add(ts.createCompilerDiagnostic(message, arg0, arg1, arg2));
}
}
function createDiagnosticForOptionPaths(onKey, key, message, arg0) {
var needCompilerDiagnostic = true;
var pathsSyntax = getOptionPathsSyntax();
for (var _i = 0, pathsSyntax_2 = pathsSyntax; _i < pathsSyntax_2.length; _i++) {
var pathProp = pathsSyntax_2[_i];
if (ts.isObjectLiteralExpression(pathProp.initializer) &&
createOptionDiagnosticInObjectLiteralSyntax(pathProp.initializer, onKey, key, undefined, message, arg0)) {
needCompilerDiagnostic = false;
}
}
if (needCompilerDiagnostic) {
programDiagnostics.add(ts.createCompilerDiagnostic(message, arg0));
}
}
function getOptionPathsSyntax() {
var compilerOptionsObjectLiteralSyntax = getCompilerOptionsObjectLiteralSyntax();
if (compilerOptionsObjectLiteralSyntax) {
return ts.getPropertyAssignment(compilerOptionsObjectLiteralSyntax, "paths");
}
return ts.emptyArray;
}
function createDiagnosticForOptionName(message, option1, option2) {
createDiagnosticForOption(true, option1, option2, message, option1, option2);
}
function createOptionValueDiagnostic(option1, message, arg0) {
createDiagnosticForOption(false, option1, undefined, message, arg0);
}
function createDiagnosticForOption(onKey, option1, option2, message, arg0, arg1) {
var compilerOptionsObjectLiteralSyntax = getCompilerOptionsObjectLiteralSyntax();
var needCompilerDiagnostic = !compilerOptionsObjectLiteralSyntax ||
!createOptionDiagnosticInObjectLiteralSyntax(compilerOptionsObjectLiteralSyntax, onKey, option1, option2, message, arg0, arg1);
if (needCompilerDiagnostic) {
programDiagnostics.add(ts.createCompilerDiagnostic(message, arg0, arg1));
}
}
function getCompilerOptionsObjectLiteralSyntax() {
if (_compilerOptionsObjectLiteralSyntax === undefined) {
_compilerOptionsObjectLiteralSyntax = null;
if (options.configFile && options.configFile.jsonObject) {
for (var _i = 0, _a = ts.getPropertyAssignment(options.configFile.jsonObject, "compilerOptions"); _i < _a.length; _i++) {
var prop = _a[_i];
if (ts.isObjectLiteralExpression(prop.initializer)) {
_compilerOptionsObjectLiteralSyntax = prop.initializer;
break;
}
}
}
}
return _compilerOptionsObjectLiteralSyntax;
}
function createOptionDiagnosticInObjectLiteralSyntax(objectLiteral, onKey, key1, key2, message, arg0, arg1) {
var props = ts.getPropertyAssignment(objectLiteral, key1, key2);
for (var _i = 0, props_2 = props; _i < props_2.length; _i++) {
var prop = props_2[_i];
programDiagnostics.add(ts.createDiagnosticForNodeInSourceFile(options.configFile, onKey ? prop.name : prop.initializer, message, arg0, arg1));
}
return !!props.length;
}
function blockEmittingOfFile(emitFileName, diag) {
hasEmitBlockingDiagnostics.set(toPath(emitFileName), true);
programDiagnostics.add(diag);
}
}
ts.createProgram = createProgram;
function getResolutionDiagnostic(options, _a) {
var extension = _a.extension;
switch (extension) {
case ".ts":
case ".d.ts":
return undefined;
case ".tsx":
return needJsx();
case ".jsx":
return needJsx() || needAllowJs();
case ".js":
return needAllowJs();
}
function needJsx() {
return options.jsx ? undefined : ts.Diagnostics.Module_0_was_resolved_to_1_but_jsx_is_not_set;
}
function needAllowJs() {
return options.allowJs || !options.noImplicitAny ? undefined : ts.Diagnostics.Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type;
}
}
ts.getResolutionDiagnostic = getResolutionDiagnostic;
function checkAllDefined(names) {
ts.Debug.assert(names.every(function (name) { return name !== undefined; }), "A name is undefined.", function () { return JSON.stringify(names); });
return names;
}
function getModuleNames(_a) {
var imports = _a.imports, moduleAugmentations = _a.moduleAugmentations;
var res = imports.map(function (i) { return i.text; });
for (var _i = 0, moduleAugmentations_1 = moduleAugmentations; _i < moduleAugmentations_1.length; _i++) {
var aug = moduleAugmentations_1[_i];
if (aug.kind === 9) {
res.push(aug.text);
}
}
return res;
}
})(ts || (ts = {}));
var ts;
(function (ts) {
ts.maxNumberOfFilesToIterateForInvalidation = 256;
function createResolutionCache(resolutionHost, rootDirForResolution) {
var filesWithChangedSetOfUnresolvedImports;
var filesWithInvalidatedResolutions;
var allFilesHaveInvalidatedResolution = false;
var resolvedModuleNames = ts.createMap();
var perDirectoryResolvedModuleNames = ts.createMap();
var resolvedTypeReferenceDirectives = ts.createMap();
var perDirectoryResolvedTypeReferenceDirectives = ts.createMap();
var getCurrentDirectory = ts.memoize(function () { return resolutionHost.getCurrentDirectory(); });
var failedLookupDefaultExtensions = [".ts", ".tsx", ".js", ".jsx", ".json"];
var customFailedLookupPaths = ts.createMap();
var directoryWatchesOfFailedLookups = ts.createMap();
var rootDir = rootDirForResolution && ts.removeTrailingDirectorySeparator(ts.getNormalizedAbsolutePath(rootDirForResolution, getCurrentDirectory()));
var rootPath = rootDir && resolutionHost.toPath(rootDir);
var typeRootsWatches = ts.createMap();
return {
startRecordingFilesWithChangedResolutions: startRecordingFilesWithChangedResolutions,
finishRecordingFilesWithChangedResolutions: finishRecordingFilesWithChangedResolutions,
startCachingPerDirectoryResolution: clearPerDirectoryResolutions,
finishCachingPerDirectoryResolution: finishCachingPerDirectoryResolution,
resolveModuleNames: resolveModuleNames,
resolveTypeReferenceDirectives: resolveTypeReferenceDirectives,
removeResolutionsOfFile: removeResolutionsOfFile,
invalidateResolutionOfFile: invalidateResolutionOfFile,
createHasInvalidatedResolution: createHasInvalidatedResolution,
updateTypeRootsWatch: updateTypeRootsWatch,
closeTypeRootsWatch: closeTypeRootsWatch,
clear: clear
};
function getResolvedModule(resolution) {
return resolution.resolvedModule;
}
function getResolvedTypeReferenceDirective(resolution) {
return resolution.resolvedTypeReferenceDirective;
}
function isInDirectoryPath(dir, file) {
if (dir === undefined || file.length <= dir.length) {
return false;
}
return ts.startsWith(file, dir) && file[dir.length] === ts.directorySeparator;
}
function clear() {
ts.clearMap(directoryWatchesOfFailedLookups, ts.closeFileWatcherOf);
customFailedLookupPaths.clear();
closeTypeRootsWatch();
resolvedModuleNames.clear();
resolvedTypeReferenceDirectives.clear();
allFilesHaveInvalidatedResolution = false;
clearPerDirectoryResolutions();
}
function startRecordingFilesWithChangedResolutions() {
filesWithChangedSetOfUnresolvedImports = [];
}
function finishRecordingFilesWithChangedResolutions() {
var collected = filesWithChangedSetOfUnresolvedImports;
filesWithChangedSetOfUnresolvedImports = undefined;
return collected;
}
function createHasInvalidatedResolution() {
if (allFilesHaveInvalidatedResolution) {
filesWithInvalidatedResolutions = undefined;
return ts.returnTrue;
}
var collected = filesWithInvalidatedResolutions;
filesWithInvalidatedResolutions = undefined;
return function (path) { return collected && collected.has(path); };
}
function clearPerDirectoryResolutions() {
perDirectoryResolvedModuleNames.clear();
perDirectoryResolvedTypeReferenceDirectives.clear();
}
function finishCachingPerDirectoryResolution() {
allFilesHaveInvalidatedResolution = false;
directoryWatchesOfFailedLookups.forEach(function (watcher, path) {
if (watcher.refCount === 0) {
directoryWatchesOfFailedLookups.delete(path);
watcher.watcher.close();
}
});
clearPerDirectoryResolutions();
}
function resolveModuleName(moduleName, containingFile, compilerOptions, host) {
var primaryResult = ts.resolveModuleName(moduleName, containingFile, compilerOptions, host);
if (!resolutionHost.getGlobalCache) {
return primaryResult;
}
var globalCache = resolutionHost.getGlobalCache();
if (globalCache !== undefined && !ts.isExternalModuleNameRelative(moduleName) && !(primaryResult.resolvedModule && ts.extensionIsTypeScript(primaryResult.resolvedModule.extension))) {
var _a = ts.loadModuleFromGlobalCache(moduleName, resolutionHost.projectName, compilerOptions, host, globalCache), resolvedModule = _a.resolvedModule, failedLookupLocations = _a.failedLookupLocations;
if (resolvedModule) {
return { resolvedModule: resolvedModule, failedLookupLocations: ts.addRange(primaryResult.failedLookupLocations, failedLookupLocations) };
}
}
return primaryResult;
}
function resolveNamesWithLocalCache(names, containingFile, cache, perDirectoryCache, loader, getResolutionWithResolvedFileName, reusedNames, logChanges) {
var path = resolutionHost.toPath(containingFile);
var resolutionsInFile = cache.get(path) || cache.set(path, ts.createMap()).get(path);
var dirPath = ts.getDirectoryPath(path);
var perDirectoryResolution = perDirectoryCache.get(dirPath);
if (!perDirectoryResolution) {
perDirectoryResolution = ts.createMap();
perDirectoryCache.set(dirPath, perDirectoryResolution);
}
var resolvedModules = [];
var compilerOptions = resolutionHost.getCompilationSettings();
var seenNamesInFile = ts.createMap();
for (var _i = 0, names_2 = names; _i < names_2.length; _i++) {
var name = names_2[_i];
var resolution = resolutionsInFile.get(name);
if (!seenNamesInFile.has(name) &&
allFilesHaveInvalidatedResolution || !resolution || resolution.isInvalidated) {
var existingResolution = resolution;
var resolutionInDirectory = perDirectoryResolution.get(name);
if (resolutionInDirectory) {
resolution = resolutionInDirectory;
}
else {
resolution = loader(name, containingFile, compilerOptions, resolutionHost);
perDirectoryResolution.set(name, resolution);
}
resolutionsInFile.set(name, resolution);
if (resolution.failedLookupLocations) {
if (existingResolution && existingResolution.failedLookupLocations) {
watchAndStopWatchDiffFailedLookupLocations(resolution, existingResolution);
}
else {
watchFailedLookupLocationOfResolution(resolution, 0);
}
}
else if (existingResolution) {
stopWatchFailedLookupLocationOfResolution(existingResolution);
}
if (logChanges && filesWithChangedSetOfUnresolvedImports && !resolutionIsEqualTo(existingResolution, resolution)) {
filesWithChangedSetOfUnresolvedImports.push(path);
logChanges = false;
}
}
ts.Debug.assert(resolution !== undefined && !resolution.isInvalidated);
seenNamesInFile.set(name, true);
resolvedModules.push(getResolutionWithResolvedFileName(resolution));
}
resolutionsInFile.forEach(function (resolution, name) {
if (!seenNamesInFile.has(name) && !ts.contains(reusedNames, name)) {
stopWatchFailedLookupLocationOfResolution(resolution);
resolutionsInFile.delete(name);
}
});
return resolvedModules;
function resolutionIsEqualTo(oldResolution, newResolution) {
if (oldResolution === newResolution) {
return true;
}
if (!oldResolution || !newResolution || oldResolution.isInvalidated) {
return false;
}
var oldResult = getResolutionWithResolvedFileName(oldResolution);
var newResult = getResolutionWithResolvedFileName(newResolution);
if (oldResult === newResult) {
return true;
}
if (!oldResult || !newResult) {
return false;
}
return oldResult.resolvedFileName === newResult.resolvedFileName;
}
}
function resolveTypeReferenceDirectives(typeDirectiveNames, containingFile) {
return resolveNamesWithLocalCache(typeDirectiveNames, containingFile, resolvedTypeReferenceDirectives, perDirectoryResolvedTypeReferenceDirectives, ts.resolveTypeReferenceDirective, getResolvedTypeReferenceDirective, undefined, false);
}
function resolveModuleNames(moduleNames, containingFile, reusedNames, logChanges) {
return resolveNamesWithLocalCache(moduleNames, containingFile, resolvedModuleNames, perDirectoryResolvedModuleNames, resolveModuleName, getResolvedModule, reusedNames, logChanges);
}
function isNodeModulesDirectory(dirPath) {
return ts.endsWith(dirPath, "/node_modules");
}
function isDirectoryAtleastAtLevelFromFSRoot(dirPath, minLevels) {
for (var searchIndex = ts.getRootLength(dirPath); minLevels > 0; minLevels--) {
searchIndex = dirPath.indexOf(ts.directorySeparator, searchIndex) + 1;
if (searchIndex === 0) {
return false;
}
}
return true;
}
function canWatchDirectory(dirPath) {
return isDirectoryAtleastAtLevelFromFSRoot(dirPath, dirPath.charCodeAt(0) === 47 ? 3 : 1);
}
function filterFSRootDirectoriesToWatch(watchPath, dirPath) {
if (!canWatchDirectory(dirPath)) {
watchPath.ignore = true;
}
return watchPath;
}
function getDirectoryToWatchFailedLookupLocation(failedLookupLocation, failedLookupLocationPath) {
if (isInDirectoryPath(rootPath, failedLookupLocationPath)) {
return { dir: rootDir, dirPath: rootPath };
}
var dir = ts.getDirectoryPath(ts.getNormalizedAbsolutePath(failedLookupLocation, getCurrentDirectory()));
var dirPath = ts.getDirectoryPath(failedLookupLocationPath);
while (ts.stringContains(dirPath, "/node_modules/")) {
dir = ts.getDirectoryPath(dir);
dirPath = ts.getDirectoryPath(dirPath);
}
if (isNodeModulesDirectory(dirPath)) {
return filterFSRootDirectoriesToWatch({ dir: dir, dirPath: dirPath }, ts.getDirectoryPath(dirPath));
}
if (rootPath !== undefined) {
while (!isInDirectoryPath(dirPath, rootPath)) {
var parentPath = ts.getDirectoryPath(dirPath);
if (parentPath === dirPath) {
break;
}
dirPath = parentPath;
dir = ts.getDirectoryPath(dir);
}
}
return filterFSRootDirectoriesToWatch({ dir: dir, dirPath: dirPath }, dirPath);
}
function isPathWithDefaultFailedLookupExtension(path) {
return ts.fileExtensionIsOneOf(path, failedLookupDefaultExtensions);
}
function watchAndStopWatchDiffFailedLookupLocations(resolution, existingResolution) {
var failedLookupLocations = resolution.failedLookupLocations;
var existingFailedLookupLocations = existingResolution.failedLookupLocations;
for (var index = 0; index < failedLookupLocations.length; index++) {
if (index === existingFailedLookupLocations.length) {
watchFailedLookupLocationOfResolution(resolution, index);
return;
}
else if (failedLookupLocations[index] !== existingFailedLookupLocations[index]) {
watchFailedLookupLocationOfResolution(resolution, index);
stopWatchFailedLookupLocationOfResolutionFrom(existingResolution, index);
return;
}
}
stopWatchFailedLookupLocationOfResolutionFrom(existingResolution, failedLookupLocations.length);
}
function watchFailedLookupLocationOfResolution(_a, startIndex) {
var failedLookupLocations = _a.failedLookupLocations;
for (var i = startIndex; i < failedLookupLocations.length; i++) {
var failedLookupLocation = failedLookupLocations[i];
var failedLookupLocationPath = resolutionHost.toPath(failedLookupLocation);
if (!isPathWithDefaultFailedLookupExtension(failedLookupLocationPath)) {
var refCount = customFailedLookupPaths.get(failedLookupLocationPath) || 0;
customFailedLookupPaths.set(failedLookupLocationPath, refCount + 1);
}
var _b = getDirectoryToWatchFailedLookupLocation(failedLookupLocation, failedLookupLocationPath), dir = _b.dir, dirPath = _b.dirPath, ignore = _b.ignore;
if (!ignore) {
var dirWatcher = directoryWatchesOfFailedLookups.get(dirPath);
if (dirWatcher) {
dirWatcher.refCount++;
}
else {
directoryWatchesOfFailedLookups.set(dirPath, { watcher: createDirectoryWatcher(dir, dirPath), refCount: 1 });
}
}
}
}
function stopWatchFailedLookupLocationOfResolution(resolution) {
if (resolution.failedLookupLocations) {
stopWatchFailedLookupLocationOfResolutionFrom(resolution, 0);
}
}
function stopWatchFailedLookupLocationOfResolutionFrom(_a, startIndex) {
var failedLookupLocations = _a.failedLookupLocations;
for (var i = startIndex; i < failedLookupLocations.length; i++) {
var failedLookupLocation = failedLookupLocations[i];
var failedLookupLocationPath = resolutionHost.toPath(failedLookupLocation);
var refCount = customFailedLookupPaths.get(failedLookupLocationPath);
if (refCount) {
if (refCount === 1) {
customFailedLookupPaths.delete(failedLookupLocationPath);
}
else {
ts.Debug.assert(refCount > 1);
customFailedLookupPaths.set(failedLookupLocationPath, refCount - 1);
}
}
var _b = getDirectoryToWatchFailedLookupLocation(failedLookupLocation, failedLookupLocationPath), dirPath = _b.dirPath, ignore = _b.ignore;
if (!ignore) {
var dirWatcher = directoryWatchesOfFailedLookups.get(dirPath);
dirWatcher.refCount--;
}
}
}
function createDirectoryWatcher(directory, dirPath) {
return resolutionHost.watchDirectoryOfFailedLookupLocation(directory, function (fileOrDirectory) {
var fileOrDirectoryPath = resolutionHost.toPath(fileOrDirectory);
if (resolutionHost.getCachedDirectoryStructureHost) {
resolutionHost.getCachedDirectoryStructureHost().addOrDeleteFileOrDirectory(fileOrDirectory, fileOrDirectoryPath);
}
if (!allFilesHaveInvalidatedResolution &&
dirPath === rootPath || isNodeModulesDirectory(dirPath) || ts.getDirectoryPath(fileOrDirectoryPath) === dirPath) {
if (invalidateResolutionOfFailedLookupLocation(fileOrDirectoryPath, dirPath === fileOrDirectoryPath)) {
resolutionHost.onInvalidatedResolution();
}
}
}, 1);
}
function removeResolutionsOfFileFromCache(cache, filePath) {
var resolutions = cache.get(filePath);
if (resolutions) {
resolutions.forEach(stopWatchFailedLookupLocationOfResolution);
cache.delete(filePath);
}
}
function removeResolutionsOfFile(filePath) {
removeResolutionsOfFileFromCache(resolvedModuleNames, filePath);
removeResolutionsOfFileFromCache(resolvedTypeReferenceDirectives, filePath);
}
function invalidateResolutionCache(cache, isInvalidatedResolution, getResolutionWithResolvedFileName) {
var seen = ts.createMap();
cache.forEach(function (resolutions, containingFilePath) {
var dirPath = ts.getDirectoryPath(containingFilePath);
var seenInDir = seen.get(dirPath);
if (!seenInDir) {
seenInDir = ts.createMap();
seen.set(dirPath, seenInDir);
}
resolutions.forEach(function (resolution, name) {
if (seenInDir.has(name)) {
return;
}
seenInDir.set(name, true);
if (!resolution.isInvalidated && isInvalidatedResolution(resolution, getResolutionWithResolvedFileName)) {
resolution.isInvalidated = true;
(filesWithInvalidatedResolutions || (filesWithInvalidatedResolutions = ts.createMap())).set(containingFilePath, true);
}
});
});
}
function hasReachedResolutionIterationLimit() {
var maxSize = resolutionHost.maxNumberOfFilesToIterateForInvalidation || ts.maxNumberOfFilesToIterateForInvalidation;
return resolvedModuleNames.size > maxSize || resolvedTypeReferenceDirectives.size > maxSize;
}
function invalidateResolutions(isInvalidatedResolution) {
if (hasReachedResolutionIterationLimit()) {
allFilesHaveInvalidatedResolution = true;
return;
}
invalidateResolutionCache(resolvedModuleNames, isInvalidatedResolution, getResolvedModule);
invalidateResolutionCache(resolvedTypeReferenceDirectives, isInvalidatedResolution, getResolvedTypeReferenceDirective);
}
function invalidateResolutionOfFile(filePath) {
removeResolutionsOfFile(filePath);
invalidateResolutions(function (resolution, getResolutionWithResolvedFileName) {
var result = getResolutionWithResolvedFileName(resolution);
return result && resolutionHost.toPath(result.resolvedFileName) === filePath;
});
}
function invalidateResolutionOfFailedLookupLocation(fileOrDirectoryPath, isCreatingWatchedDirectory) {
var isChangedFailedLookupLocation;
if (isCreatingWatchedDirectory) {
isChangedFailedLookupLocation = function (location) { return isInDirectoryPath(fileOrDirectoryPath, resolutionHost.toPath(location)); };
}
else {
if (!isPathWithDefaultFailedLookupExtension(fileOrDirectoryPath) && !customFailedLookupPaths.has(fileOrDirectoryPath)) {
return false;
}
isChangedFailedLookupLocation = function (location) { return resolutionHost.toPath(location) === fileOrDirectoryPath; };
}
var hasChangedFailedLookupLocation = function (resolution) { return ts.some(resolution.failedLookupLocations, isChangedFailedLookupLocation); };
var invalidatedFilesCount = filesWithInvalidatedResolutions && filesWithInvalidatedResolutions.size;
invalidateResolutions(hasChangedFailedLookupLocation);
return allFilesHaveInvalidatedResolution || filesWithInvalidatedResolutions && filesWithInvalidatedResolutions.size !== invalidatedFilesCount;
}
function closeTypeRootsWatch() {
ts.clearMap(typeRootsWatches, ts.closeFileWatcher);
}
function createTypeRootsWatch(_typeRootPath, typeRoot) {
return resolutionHost.watchTypeRootsDirectory(typeRoot, function (fileOrDirectory) {
var fileOrDirectoryPath = resolutionHost.toPath(fileOrDirectory);
if (resolutionHost.getCachedDirectoryStructureHost) {
resolutionHost.getCachedDirectoryStructureHost().addOrDeleteFileOrDirectory(fileOrDirectory, fileOrDirectoryPath);
}
resolutionHost.onChangedAutomaticTypeDirectiveNames();
}, 1);
}
function updateTypeRootsWatch() {
var options = resolutionHost.getCompilationSettings();
if (options.types) {
closeTypeRootsWatch();
return;
}
var typeRoots = ts.getEffectiveTypeRoots(options, { directoryExists: directoryExistsForTypeRootWatch, getCurrentDirectory: getCurrentDirectory });
if (typeRoots) {
ts.mutateMap(typeRootsWatches, ts.arrayToMap(typeRoots, function (tr) { return resolutionHost.toPath(tr); }), {
createNewValue: createTypeRootsWatch,
onDeleteValue: ts.closeFileWatcher
});
}
else {
closeTypeRootsWatch();
}
}
function directoryExistsForTypeRootWatch(nodeTypesDirectory) {
var dir = ts.getDirectoryPath(ts.getDirectoryPath(nodeTypesDirectory));
var dirPath = resolutionHost.toPath(dir);
return dirPath === rootPath || canWatchDirectory(dirPath);
}
}
ts.createResolutionCache = createResolutionCache;
})(ts || (ts = {}));
var ts;
(function (ts) {
var defaultFormatDiagnosticsHost = ts.sys ? {
getCurrentDirectory: function () { return ts.sys.getCurrentDirectory(); },
getNewLine: function () { return ts.sys.newLine; },
getCanonicalFileName: ts.createGetCanonicalFileName(ts.sys.useCaseSensitiveFileNames)
} : undefined;
function createDiagnosticReporter(system, worker, formatDiagnosticsHost) {
if (system === void 0) { system = ts.sys; }
if (worker === void 0) { worker = reportDiagnosticSimply; }
return function (diagnostic) { return worker(diagnostic, getFormatDiagnosticsHost(), system); };
function getFormatDiagnosticsHost() {
return formatDiagnosticsHost || (formatDiagnosticsHost = system === ts.sys ? defaultFormatDiagnosticsHost : {
getCurrentDirectory: function () { return system.getCurrentDirectory(); },
getNewLine: function () { return system.newLine; },
getCanonicalFileName: ts.createGetCanonicalFileName(system.useCaseSensitiveFileNames),
});
}
}
ts.createDiagnosticReporter = createDiagnosticReporter;
function createWatchDiagnosticReporter(system) {
if (system === void 0) { system = ts.sys; }
return function (diagnostic) {
var output = new Date().toLocaleTimeString() + " - ";
output += "" + ts.flattenDiagnosticMessageText(diagnostic.messageText, system.newLine) + (system.newLine + system.newLine + system.newLine);
system.write(output);
};
}
ts.createWatchDiagnosticReporter = createWatchDiagnosticReporter;
function reportDiagnostics(diagnostics, reportDiagnostic) {
for (var _i = 0, diagnostics_3 = diagnostics; _i < diagnostics_3.length; _i++) {
var diagnostic = diagnostics_3[_i];
reportDiagnostic(diagnostic);
}
}
ts.reportDiagnostics = reportDiagnostics;
function reportDiagnosticSimply(diagnostic, host, system) {
system.write(ts.formatDiagnostic(diagnostic, host));
}
ts.reportDiagnosticSimply = reportDiagnosticSimply;
function reportDiagnosticWithColorAndContext(diagnostic, host, system) {
system.write(ts.formatDiagnosticsWithColorAndContext([diagnostic], host) + host.getNewLine());
}
ts.reportDiagnosticWithColorAndContext = reportDiagnosticWithColorAndContext;
function parseConfigFile(configFileName, optionsToExtend, system, reportDiagnostic, reportWatchDiagnostic) {
var configFileText;
try {
configFileText = system.readFile(configFileName);
}
catch (e) {
var error = ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_read_file_0_Colon_1, configFileName, e.message);
reportWatchDiagnostic(error);
system.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
return;
}
if (!configFileText) {
var error = ts.createCompilerDiagnostic(ts.Diagnostics.File_0_not_found, configFileName);
reportDiagnostics([error], reportDiagnostic);
system.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
return;
}
var result = ts.parseJsonText(configFileName, configFileText);
reportDiagnostics(result.parseDiagnostics, reportDiagnostic);
var cwd = system.getCurrentDirectory();
var configParseResult = ts.parseJsonSourceFileConfigFileContent(result, system, ts.getNormalizedAbsolutePath(ts.getDirectoryPath(configFileName), cwd), optionsToExtend, ts.getNormalizedAbsolutePath(configFileName, cwd));
reportDiagnostics(configParseResult.errors, reportDiagnostic);
return configParseResult;
}
ts.parseConfigFile = parseConfigFile;
function reportEmittedFiles(files, system) {
if (!files || files.length === 0) {
return;
}
var currentDir = system.getCurrentDirectory();
for (var _i = 0, files_3 = files; _i < files_3.length; _i++) {
var file = files_3[_i];
var filepath = ts.getNormalizedAbsolutePath(file, currentDir);
system.write("TSFILE: " + filepath + system.newLine);
}
}
function handleEmitOutputAndReportErrors(system, program, emittedFiles, emitSkipped, diagnostics, reportDiagnostic) {
reportDiagnostics(ts.sortAndDeduplicateDiagnostics(diagnostics), reportDiagnostic);
reportEmittedFiles(emittedFiles, system);
if (program.getCompilerOptions().listFiles) {
ts.forEach(program.getSourceFiles(), function (file) {
system.write(file.fileName + system.newLine);
});
}
if (emitSkipped && diagnostics.length > 0) {
return ts.ExitStatus.DiagnosticsPresent_OutputsSkipped;
}
else if (diagnostics.length > 0) {
return ts.ExitStatus.DiagnosticsPresent_OutputsGenerated;
}
return ts.ExitStatus.Success;
}
ts.handleEmitOutputAndReportErrors = handleEmitOutputAndReportErrors;
function createWatchingSystemHost(pretty, system, parseConfigFile, reportDiagnostic, reportWatchDiagnostic) {
if (system === void 0) { system = ts.sys; }
reportDiagnostic = reportDiagnostic || createDiagnosticReporter(system, pretty ? reportDiagnosticWithColorAndContext : reportDiagnosticSimply);
reportWatchDiagnostic = reportWatchDiagnostic || createWatchDiagnosticReporter(system);
parseConfigFile = parseConfigFile || ts.parseConfigFile;
return {
system: system,
parseConfigFile: parseConfigFile,
reportDiagnostic: reportDiagnostic,
reportWatchDiagnostic: reportWatchDiagnostic,
beforeCompile: ts.noop,
afterCompile: compileWatchedProgram,
};
function compileWatchedProgram(host, program, builder) {
var diagnostics = program.getSyntacticDiagnostics().slice();
var reportSemanticDiagnostics = false;
if (diagnostics.length === 0) {
ts.addRange(diagnostics, program.getOptionsDiagnostics());
ts.addRange(diagnostics, program.getGlobalDiagnostics());
if (diagnostics.length === 0) {
reportSemanticDiagnostics = true;
}
}
var emittedFiles = program.getCompilerOptions().listEmittedFiles ? [] : undefined;
var sourceMaps;
var emitSkipped;
var result = builder.emitChangedFiles(program, writeFile);
if (result.length === 0) {
emitSkipped = true;
}
else {
for (var _i = 0, result_5 = result; _i < result_5.length; _i++) {
var emitOutput = result_5[_i];
if (emitOutput.emitSkipped) {
emitSkipped = true;
}
ts.addRange(diagnostics, emitOutput.diagnostics);
sourceMaps = ts.concatenate(sourceMaps, emitOutput.sourceMaps);
}
}
if (reportSemanticDiagnostics) {
ts.addRange(diagnostics, builder.getSemanticDiagnostics(program));
}
return handleEmitOutputAndReportErrors(host, program, emittedFiles, emitSkipped, diagnostics, reportDiagnostic);
function ensureDirectoriesExist(directoryPath) {
if (directoryPath.length > ts.getRootLength(directoryPath) && !host.directoryExists(directoryPath)) {
var parentDirectory = ts.getDirectoryPath(directoryPath);
ensureDirectoriesExist(parentDirectory);
host.createDirectory(directoryPath);
}
}
function writeFile(fileName, text, writeByteOrderMark, onError) {
try {
ts.performance.mark("beforeIOWrite");
ensureDirectoriesExist(ts.getDirectoryPath(ts.normalizePath(fileName)));
host.writeFile(fileName, text, writeByteOrderMark);
ts.performance.mark("afterIOWrite");
ts.performance.measure("I/O Write", "beforeIOWrite", "afterIOWrite");
if (emittedFiles) {
emittedFiles.push(fileName);
}
}
catch (e) {
if (onError) {
onError(e.message);
}
}
}
}
}
ts.createWatchingSystemHost = createWatchingSystemHost;
function createWatchModeWithConfigFile(configParseResult, optionsToExtend, watchingHost) {
if (optionsToExtend === void 0) { optionsToExtend = {}; }
return createWatchMode(configParseResult.fileNames, configParseResult.options, watchingHost, configParseResult.options.configFilePath, configParseResult.configFileSpecs, configParseResult.wildcardDirectories, optionsToExtend);
}
ts.createWatchModeWithConfigFile = createWatchModeWithConfigFile;
function createWatchModeWithoutConfigFile(rootFileNames, compilerOptions, watchingHost) {
return createWatchMode(rootFileNames, compilerOptions, watchingHost);
}
ts.createWatchModeWithoutConfigFile = createWatchModeWithoutConfigFile;
function createWatchMode(rootFileNames, compilerOptions, watchingHost, configFileName, configFileSpecs, configFileWildCardDirectories, optionsToExtendForConfigFile) {
var program;
var needsReload;
var missingFilesMap;
var watchedWildcardDirectories;
var timerToUpdateProgram;
var sourceFilesCache = ts.createMap();
var missingFilePathsRequestedForRelease;
var hasChangedCompilerOptions = false;
var hasChangedAutomaticTypeDirectiveNames = false;
var loggingEnabled = compilerOptions.diagnostics || compilerOptions.extendedDiagnostics;
var writeLog = loggingEnabled ? function (s) { system.write(s); system.write(system.newLine); } : ts.noop;
var watchFile = compilerOptions.extendedDiagnostics ? ts.addFileWatcherWithLogging : loggingEnabled ? ts.addFileWatcherWithOnlyTriggerLogging : ts.addFileWatcher;
var watchFilePath = compilerOptions.extendedDiagnostics ? ts.addFilePathWatcherWithLogging : ts.addFilePathWatcher;
var watchDirectoryWorker = compilerOptions.extendedDiagnostics ? ts.addDirectoryWatcherWithLogging : ts.addDirectoryWatcher;
watchingHost = watchingHost || createWatchingSystemHost(compilerOptions.pretty);
var system = watchingHost.system, parseConfigFile = watchingHost.parseConfigFile, reportDiagnostic = watchingHost.reportDiagnostic, reportWatchDiagnostic = watchingHost.reportWatchDiagnostic, beforeCompile = watchingHost.beforeCompile, afterCompile = watchingHost.afterCompile;
var directoryStructureHost = configFileName ? ts.createCachedDirectoryStructureHost(system) : system;
if (configFileName) {
watchFile(system, configFileName, scheduleProgramReload, writeLog);
}
var getCurrentDirectory = ts.memoize(function () { return directoryStructureHost.getCurrentDirectory(); });
var realpath = system.realpath && (function (path) { return system.realpath(path); });
var getCachedDirectoryStructureHost = configFileName && (function () { return directoryStructureHost; });
var getCanonicalFileName = ts.createGetCanonicalFileName(system.useCaseSensitiveFileNames);
var newLine = ts.getNewLineCharacter(compilerOptions, system);
var compilerHost = {
getSourceFile: function (fileName, languageVersion, onError, shouldCreateNewSourceFile) { return getVersionedSourceFileByPath(fileName, toPath(fileName), languageVersion, onError, shouldCreateNewSourceFile); },
getSourceFileByPath: getVersionedSourceFileByPath,
getDefaultLibLocation: getDefaultLibLocation,
getDefaultLibFileName: function (options) { return ts.combinePaths(getDefaultLibLocation(), ts.getDefaultLibFileName(options)); },
writeFile: ts.notImplemented,
getCurrentDirectory: getCurrentDirectory,
useCaseSensitiveFileNames: function () { return system.useCaseSensitiveFileNames; },
getCanonicalFileName: getCanonicalFileName,
getNewLine: function () { return newLine; },
fileExists: fileExists,
readFile: function (fileName) { return system.readFile(fileName); },
trace: function (s) { return system.write(s + newLine); },
directoryExists: function (directoryName) { return directoryStructureHost.directoryExists(directoryName); },
getEnvironmentVariable: function (name) { return system.getEnvironmentVariable ? system.getEnvironmentVariable(name) : ""; },
getDirectories: function (path) { return directoryStructureHost.getDirectories(path); },
realpath: realpath,
resolveTypeReferenceDirectives: function (typeDirectiveNames, containingFile) { return resolutionCache.resolveTypeReferenceDirectives(typeDirectiveNames, containingFile); },
resolveModuleNames: function (moduleNames, containingFile, reusedNames) { return resolutionCache.resolveModuleNames(moduleNames, containingFile, reusedNames, false); },
onReleaseOldSourceFile: onReleaseOldSourceFile,
toPath: toPath,
getCompilationSettings: function () { return compilerOptions; },
watchDirectoryOfFailedLookupLocation: watchDirectory,
watchTypeRootsDirectory: watchDirectory,
getCachedDirectoryStructureHost: getCachedDirectoryStructureHost,
onInvalidatedResolution: scheduleProgramUpdate,
onChangedAutomaticTypeDirectiveNames: function () {
hasChangedAutomaticTypeDirectiveNames = true;
scheduleProgramUpdate();
},
writeLog: writeLog
};
var resolutionCache = ts.createResolutionCache(compilerHost, configFileName ?
ts.getDirectoryPath(ts.getNormalizedAbsolutePath(configFileName, getCurrentDirectory())) :
getCurrentDirectory());
var builder = ts.createBuilder({ getCanonicalFileName: getCanonicalFileName, computeHash: computeHash });
synchronizeProgram();
watchConfigFileWildCardDirectories();
return function () { return program; };
function synchronizeProgram() {
writeLog("Synchronizing program");
if (hasChangedCompilerOptions) {
newLine = ts.getNewLineCharacter(compilerOptions, system);
if (program && ts.changesAffectModuleResolution(program.getCompilerOptions(), compilerOptions)) {
resolutionCache.clear();
}
}
var hasInvalidatedResolution = resolutionCache.createHasInvalidatedResolution();
if (ts.isProgramUptoDate(program, rootFileNames, compilerOptions, getSourceVersion, fileExists, hasInvalidatedResolution, hasChangedAutomaticTypeDirectiveNames)) {
return;
}
beforeCompile(compilerOptions);
var needsUpdateInTypeRootWatch = hasChangedCompilerOptions || !program;
hasChangedCompilerOptions = false;
resolutionCache.startCachingPerDirectoryResolution();
compilerHost.hasInvalidatedResolution = hasInvalidatedResolution;
compilerHost.hasChangedAutomaticTypeDirectiveNames = hasChangedAutomaticTypeDirectiveNames;
program = ts.createProgram(rootFileNames, compilerOptions, compilerHost, program);
resolutionCache.finishCachingPerDirectoryResolution();
builder.updateProgram(program);
ts.updateMissingFilePathsWatch(program, missingFilesMap || (missingFilesMap = ts.createMap()), watchMissingFilePath);
if (needsUpdateInTypeRootWatch) {
resolutionCache.updateTypeRootsWatch();
}
if (missingFilePathsRequestedForRelease) {
for (var _i = 0, missingFilePathsRequestedForRelease_1 = missingFilePathsRequestedForRelease; _i < missingFilePathsRequestedForRelease_1.length; _i++) {
var missingFilePath = missingFilePathsRequestedForRelease_1[_i];
if (!missingFilesMap.has(missingFilePath)) {
sourceFilesCache.delete(missingFilePath);
}
}
missingFilePathsRequestedForRelease = undefined;
}
afterCompile(directoryStructureHost, program, builder);
reportWatchDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.Compilation_complete_Watching_for_file_changes));
}
function toPath(fileName) {
return ts.toPath(fileName, getCurrentDirectory(), getCanonicalFileName);
}
function fileExists(fileName) {
var path = toPath(fileName);
var hostSourceFileInfo = sourceFilesCache.get(path);
if (hostSourceFileInfo !== undefined) {
return !ts.isString(hostSourceFileInfo);
}
return directoryStructureHost.fileExists(fileName);
}
function getDefaultLibLocation() {
return ts.getDirectoryPath(ts.normalizePath(system.getExecutingFilePath()));
}
function getVersionedSourceFileByPath(fileName, path, languageVersion, onError, shouldCreateNewSourceFile) {
var hostSourceFile = sourceFilesCache.get(path);
if (ts.isString(hostSourceFile)) {
return undefined;
}
if (!hostSourceFile || shouldCreateNewSourceFile || hostSourceFile.version.toString() !== hostSourceFile.sourceFile.version) {
var sourceFile = getNewSourceFile();
if (hostSourceFile) {
if (shouldCreateNewSourceFile) {
hostSourceFile.version++;
}
if (sourceFile) {
hostSourceFile.sourceFile = sourceFile;
sourceFile.version = hostSourceFile.version.toString();
if (!hostSourceFile.fileWatcher) {
hostSourceFile.fileWatcher = watchFilePath(system, fileName, onSourceFileChange, path, writeLog);
}
}
else {
hostSourceFile.fileWatcher.close();
sourceFilesCache.set(path, hostSourceFile.version.toString());
}
}
else {
var fileWatcher = void 0;
if (sourceFile) {
sourceFile.version = "0";
fileWatcher = watchFilePath(system, fileName, onSourceFileChange, path, writeLog);
sourceFilesCache.set(path, { sourceFile: sourceFile, version: 0, fileWatcher: fileWatcher });
}
else {
sourceFilesCache.set(path, "0");
}
}
return sourceFile;
}
return hostSourceFile.sourceFile;
function getNewSourceFile() {
var text;
try {
ts.performance.mark("beforeIORead");
text = system.readFile(fileName, compilerOptions.charset);
ts.performance.mark("afterIORead");
ts.performance.measure("I/O Read", "beforeIORead", "afterIORead");
}
catch (e) {
if (onError) {
onError(e.message);
}
}
return text !== undefined ? ts.createSourceFile(fileName, text, languageVersion) : undefined;
}
}
function removeSourceFile(path) {
var hostSourceFile = sourceFilesCache.get(path);
if (hostSourceFile !== undefined) {
if (!ts.isString(hostSourceFile)) {
hostSourceFile.fileWatcher.close();
resolutionCache.invalidateResolutionOfFile(path);
}
sourceFilesCache.delete(path);
}
}
function getSourceVersion(path) {
var hostSourceFile = sourceFilesCache.get(path);
return !hostSourceFile || ts.isString(hostSourceFile) ? undefined : hostSourceFile.version.toString();
}
function onReleaseOldSourceFile(oldSourceFile, _oldOptions) {
var hostSourceFileInfo = sourceFilesCache.get(oldSourceFile.path);
if (hostSourceFileInfo) {
if (ts.isString(hostSourceFileInfo)) {
(missingFilePathsRequestedForRelease || (missingFilePathsRequestedForRelease = [])).push(oldSourceFile.path);
}
else if (hostSourceFileInfo.sourceFile === oldSourceFile) {
sourceFilesCache.delete(oldSourceFile.path);
resolutionCache.removeResolutionsOfFile(oldSourceFile.path);
}
}
}
function scheduleProgramUpdate() {
if (!system.setTimeout || !system.clearTimeout) {
return;
}
if (timerToUpdateProgram) {
system.clearTimeout(timerToUpdateProgram);
}
timerToUpdateProgram = system.setTimeout(updateProgram, 250);
}
function scheduleProgramReload() {
ts.Debug.assert(!!configFileName);
needsReload = true;
scheduleProgramUpdate();
}
function updateProgram() {
timerToUpdateProgram = undefined;
reportWatchDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.File_change_detected_Starting_incremental_compilation));
if (needsReload) {
reloadConfigFile();
}
else {
synchronizeProgram();
}
}
function reloadConfigFile() {
writeLog("Reloading config file: " + configFileName);
needsReload = false;
var cachedHost = directoryStructureHost;
cachedHost.clearCache();
var configParseResult = parseConfigFile(configFileName, optionsToExtendForConfigFile, cachedHost, reportDiagnostic, reportWatchDiagnostic);
rootFileNames = configParseResult.fileNames;
compilerOptions = configParseResult.options;
hasChangedCompilerOptions = true;
configFileSpecs = configParseResult.configFileSpecs;
configFileWildCardDirectories = configParseResult.wildcardDirectories;
synchronizeProgram();
watchConfigFileWildCardDirectories();
}
function onSourceFileChange(fileName, eventKind, path) {
updateCachedSystemWithFile(fileName, path, eventKind);
var hostSourceFile = sourceFilesCache.get(path);
if (hostSourceFile) {
if (eventKind === ts.FileWatcherEventKind.Deleted) {
resolutionCache.invalidateResolutionOfFile(path);
if (!ts.isString(hostSourceFile)) {
hostSourceFile.fileWatcher.close();
sourceFilesCache.set(path, (hostSourceFile.version++).toString());
}
}
else {
if (ts.isString(hostSourceFile)) {
sourceFilesCache.delete(path);
}
else {
hostSourceFile.version++;
}
}
}
scheduleProgramUpdate();
}
function updateCachedSystemWithFile(fileName, path, eventKind) {
if (configFileName) {
directoryStructureHost.addOrDeleteFile(fileName, path, eventKind);
}
}
function watchDirectory(directory, cb, flags) {
return watchDirectoryWorker(system, directory, cb, flags, writeLog);
}
function watchMissingFilePath(missingFilePath) {
return watchFilePath(system, missingFilePath, onMissingFileChange, missingFilePath, writeLog);
}
function onMissingFileChange(fileName, eventKind, missingFilePath) {
updateCachedSystemWithFile(fileName, missingFilePath, eventKind);
if (eventKind === ts.FileWatcherEventKind.Created && missingFilesMap.has(missingFilePath)) {
missingFilesMap.get(missingFilePath).close();
missingFilesMap.delete(missingFilePath);
removeSourceFile(missingFilePath);
scheduleProgramUpdate();
}
}
function watchConfigFileWildCardDirectories() {
ts.updateWatchingWildcardDirectories(watchedWildcardDirectories || (watchedWildcardDirectories = ts.createMap()), ts.createMapFromTemplate(configFileWildCardDirectories), watchWildcardDirectory);
}
function watchWildcardDirectory(directory, flags) {
return watchDirectory(directory, function (fileOrDirectory) {
ts.Debug.assert(!!configFileName);
var fileOrDirectoryPath = toPath(fileOrDirectory);
var result = directoryStructureHost.addOrDeleteFileOrDirectory(fileOrDirectory, fileOrDirectoryPath);
var hostSourceFile = sourceFilesCache.get(fileOrDirectoryPath);
if (hostSourceFile && !ts.isString(hostSourceFile) && (result ? result.fileExists : directoryStructureHost.fileExists(fileOrDirectory))) {
hostSourceFile.version++;
}
else {
removeSourceFile(fileOrDirectoryPath);
}
if (fileOrDirectoryPath !== directory && !ts.isSupportedSourceFileName(fileOrDirectory, compilerOptions)) {
writeLog("Project: " + configFileName + " Detected file add/remove of non supported extension: " + fileOrDirectory);
return;
}
if (!needsReload) {
var result_6 = ts.getFileNamesFromConfigSpecs(configFileSpecs, ts.getDirectoryPath(configFileName), compilerOptions, directoryStructureHost);
if (!configFileSpecs.filesSpecs && result_6.fileNames.length === 0) {
reportDiagnostic(ts.getErrorForNoInputFiles(configFileSpecs, configFileName));
}
rootFileNames = result_6.fileNames;
scheduleProgramUpdate();
}
}, flags);
}
function computeHash(data) {
return system.createHash ? system.createHash(data) : data;
}
}
})(ts || (ts = {}));
var ts;
(function (ts) {
ts.compileOnSaveCommandLineOption = { name: "compileOnSave", type: "boolean" };
ts.optionDeclarations = [
{
name: "help",
shortName: "h",
type: "boolean",
showInSimplifiedHelpView: true,
category: ts.Diagnostics.Command_line_Options,
description: ts.Diagnostics.Print_this_message,
},
{
name: "help",
shortName: "?",
type: "boolean"
},
{
name: "all",
type: "boolean",
showInSimplifiedHelpView: true,
category: ts.Diagnostics.Command_line_Options,
description: ts.Diagnostics.Show_all_compiler_options,
},
{
name: "version",
shortName: "v",
type: "boolean",
showInSimplifiedHelpView: true,
category: ts.Diagnostics.Command_line_Options,
description: ts.Diagnostics.Print_the_compiler_s_version,
},
{
name: "init",
type: "boolean",
showInSimplifiedHelpView: true,
category: ts.Diagnostics.Command_line_Options,
description: ts.Diagnostics.Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file,
},
{
name: "project",
shortName: "p",
type: "string",
isFilePath: true,
showInSimplifiedHelpView: true,
category: ts.Diagnostics.Command_line_Options,
paramType: ts.Diagnostics.FILE_OR_DIRECTORY,
description: ts.Diagnostics.Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json,
},
{
name: "pretty",
type: "boolean",
showInSimplifiedHelpView: true,
category: ts.Diagnostics.Command_line_Options,
description: ts.Diagnostics.Stylize_errors_and_messages_using_color_and_context_experimental
},
{
name: "watch",
shortName: "w",
type: "boolean",
showInSimplifiedHelpView: true,
category: ts.Diagnostics.Command_line_Options,
description: ts.Diagnostics.Watch_input_files,
},
{
name: "target",
shortName: "t",
type: ts.createMapFromTemplate({
"es3": 0,
"es5": 1,
"es6": 2,
"es2015": 2,
"es2016": 3,
"es2017": 4,
"esnext": 5,
}),
paramType: ts.Diagnostics.VERSION,
showInSimplifiedHelpView: true,
category: ts.Diagnostics.Basic_Options,
description: ts.Diagnostics.Specify_ECMAScript_target_version_Colon_ES3_default_ES5_ES2015_ES2016_ES2017_or_ESNEXT,
},
{
name: "module",
shortName: "m",
type: ts.createMapFromTemplate({
"none": ts.ModuleKind.None,
"commonjs": ts.ModuleKind.CommonJS,
"amd": ts.ModuleKind.AMD,
"system": ts.ModuleKind.System,
"umd": ts.ModuleKind.UMD,
"es6": ts.ModuleKind.ES2015,
"es2015": ts.ModuleKind.ES2015,
"esnext": ts.ModuleKind.ESNext
}),
paramType: ts.Diagnostics.KIND,
showInSimplifiedHelpView: true,
category: ts.Diagnostics.Basic_Options,
description: ts.Diagnostics.Specify_module_code_generation_Colon_none_commonjs_amd_system_umd_es2015_or_ESNext,
},
{
name: "lib",
type: "list",
element: {
name: "lib",
type: ts.createMapFromTemplate({
"es5": "lib.es5.d.ts",
"es6": "lib.es2015.d.ts",
"es2015": "lib.es2015.d.ts",
"es7": "lib.es2016.d.ts",
"es2016": "lib.es2016.d.ts",
"es2017": "lib.es2017.d.ts",
"esnext": "lib.esnext.d.ts",
"dom": "lib.dom.d.ts",
"dom.iterable": "lib.dom.iterable.d.ts",
"webworker": "lib.webworker.d.ts",
"scripthost": "lib.scripthost.d.ts",
"es2015.core": "lib.es2015.core.d.ts",
"es2015.collection": "lib.es2015.collection.d.ts",
"es2015.generator": "lib.es2015.generator.d.ts",
"es2015.iterable": "lib.es2015.iterable.d.ts",
"es2015.promise": "lib.es2015.promise.d.ts",
"es2015.proxy": "lib.es2015.proxy.d.ts",
"es2015.reflect": "lib.es2015.reflect.d.ts",
"es2015.symbol": "lib.es2015.symbol.d.ts",
"es2015.symbol.wellknown": "lib.es2015.symbol.wellknown.d.ts",
"es2016.array.include": "lib.es2016.array.include.d.ts",
"es2017.object": "lib.es2017.object.d.ts",
"es2017.sharedmemory": "lib.es2017.sharedmemory.d.ts",
"es2017.string": "lib.es2017.string.d.ts",
"es2017.intl": "lib.es2017.intl.d.ts",
"esnext.asynciterable": "lib.esnext.asynciterable.d.ts",
}),
},
showInSimplifiedHelpView: true,
category: ts.Diagnostics.Basic_Options,
description: ts.Diagnostics.Specify_library_files_to_be_included_in_the_compilation_Colon
},
{
name: "allowJs",
type: "boolean",
showInSimplifiedHelpView: true,
category: ts.Diagnostics.Basic_Options,
description: ts.Diagnostics.Allow_javascript_files_to_be_compiled
},
{
name: "checkJs",
type: "boolean",
category: ts.Diagnostics.Basic_Options,
description: ts.Diagnostics.Report_errors_in_js_files
},
{
name: "jsx",
type: ts.createMapFromTemplate({
"preserve": 1,
"react-native": 3,
"react": 2
}),
paramType: ts.Diagnostics.KIND,
showInSimplifiedHelpView: true,
category: ts.Diagnostics.Basic_Options,
description: ts.Diagnostics.Specify_JSX_code_generation_Colon_preserve_react_native_or_react,
},
{
name: "declaration",
shortName: "d",
type: "boolean",
showInSimplifiedHelpView: true,
category: ts.Diagnostics.Basic_Options,
description: ts.Diagnostics.Generates_corresponding_d_ts_file,
},
{
name: "sourceMap",
type: "boolean",
showInSimplifiedHelpView: true,
category: ts.Diagnostics.Basic_Options,
description: ts.Diagnostics.Generates_corresponding_map_file,
},
{
name: "outFile",
type: "string",
isFilePath: true,
paramType: ts.Diagnostics.FILE,
showInSimplifiedHelpView: true,
category: ts.Diagnostics.Basic_Options,
description: ts.Diagnostics.Concatenate_and_emit_output_to_single_file,
},
{
name: "outDir",
type: "string",
isFilePath: true,
paramType: ts.Diagnostics.DIRECTORY,
showInSimplifiedHelpView: true,
category: ts.Diagnostics.Basic_Options,
description: ts.Diagnostics.Redirect_output_structure_to_the_directory,
},
{
name: "rootDir",
type: "string",
isFilePath: true,
paramType: ts.Diagnostics.LOCATION,
category: ts.Diagnostics.Basic_Options,
description: ts.Diagnostics.Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir,
},
{
name: "removeComments",
type: "boolean",
showInSimplifiedHelpView: true,
category: ts.Diagnostics.Basic_Options,
description: ts.Diagnostics.Do_not_emit_comments_to_output,
},
{
name: "noEmit",
type: "boolean",
showInSimplifiedHelpView: true,
category: ts.Diagnostics.Basic_Options,
description: ts.Diagnostics.Do_not_emit_outputs,
},
{
name: "importHelpers",
type: "boolean",
category: ts.Diagnostics.Basic_Options,
description: ts.Diagnostics.Import_emit_helpers_from_tslib
},
{
name: "downlevelIteration",
type: "boolean",
category: ts.Diagnostics.Basic_Options,
description: ts.Diagnostics.Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3
},
{
name: "isolatedModules",
type: "boolean",
category: ts.Diagnostics.Basic_Options,
description: ts.Diagnostics.Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule
},
{
name: "strict",
type: "boolean",
showInSimplifiedHelpView: true,
category: ts.Diagnostics.Strict_Type_Checking_Options,
description: ts.Diagnostics.Enable_all_strict_type_checking_options
},
{
name: "noImplicitAny",
type: "boolean",
showInSimplifiedHelpView: true,
category: ts.Diagnostics.Strict_Type_Checking_Options,
description: ts.Diagnostics.Raise_error_on_expressions_and_declarations_with_an_implied_any_type,
},
{
name: "strictNullChecks",
type: "boolean",
showInSimplifiedHelpView: true,
category: ts.Diagnostics.Strict_Type_Checking_Options,
description: ts.Diagnostics.Enable_strict_null_checks
},
{
name: "strictFunctionTypes",
type: "boolean",
showInSimplifiedHelpView: true,
category: ts.Diagnostics.Strict_Type_Checking_Options,
description: ts.Diagnostics.Enable_strict_checking_of_function_types
},
{
name: "noImplicitThis",
type: "boolean",
showInSimplifiedHelpView: true,
category: ts.Diagnostics.Strict_Type_Checking_Options,
description: ts.Diagnostics.Raise_error_on_this_expressions_with_an_implied_any_type,
},
{
name: "alwaysStrict",
type: "boolean",
showInSimplifiedHelpView: true,
category: ts.Diagnostics.Strict_Type_Checking_Options,
description: ts.Diagnostics.Parse_in_strict_mode_and_emit_use_strict_for_each_source_file
},
{
name: "noUnusedLocals",
type: "boolean",
showInSimplifiedHelpView: true,
category: ts.Diagnostics.Additional_Checks,
description: ts.Diagnostics.Report_errors_on_unused_locals,
},
{
name: "noUnusedParameters",
type: "boolean",
showInSimplifiedHelpView: true,
category: ts.Diagnostics.Additional_Checks,
description: ts.Diagnostics.Report_errors_on_unused_parameters,
},
{
name: "noImplicitReturns",
type: "boolean",
showInSimplifiedHelpView: true,
category: ts.Diagnostics.Additional_Checks,
description: ts.Diagnostics.Report_error_when_not_all_code_paths_in_function_return_a_value
},
{
name: "noFallthroughCasesInSwitch",
type: "boolean",
showInSimplifiedHelpView: true,
category: ts.Diagnostics.Additional_Checks,
description: ts.Diagnostics.Report_errors_for_fallthrough_cases_in_switch_statement
},
{
name: "moduleResolution",
type: ts.createMapFromTemplate({
"node": ts.ModuleResolutionKind.NodeJs,
"classic": ts.ModuleResolutionKind.Classic,
}),
paramType: ts.Diagnostics.STRATEGY,
category: ts.Diagnostics.Module_Resolution_Options,
description: ts.Diagnostics.Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6,
},
{
name: "baseUrl",
type: "string",
isFilePath: true,
category: ts.Diagnostics.Module_Resolution_Options,
description: ts.Diagnostics.Base_directory_to_resolve_non_absolute_module_names
},
{
name: "paths",
type: "object",
isTSConfigOnly: true,
category: ts.Diagnostics.Module_Resolution_Options,
description: ts.Diagnostics.A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl
},
{
name: "rootDirs",
type: "list",
isTSConfigOnly: true,
element: {
name: "rootDirs",
type: "string",
isFilePath: true
},
category: ts.Diagnostics.Module_Resolution_Options,
description: ts.Diagnostics.List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime
},
{
name: "typeRoots",
type: "list",
element: {
name: "typeRoots",
type: "string",
isFilePath: true
},
category: ts.Diagnostics.Module_Resolution_Options,
description: ts.Diagnostics.List_of_folders_to_include_type_definitions_from
},
{
name: "types",
type: "list",
element: {
name: "types",
type: "string"
},
showInSimplifiedHelpView: true,
category: ts.Diagnostics.Module_Resolution_Options,
description: ts.Diagnostics.Type_declaration_files_to_be_included_in_compilation
},
{
name: "allowSyntheticDefaultImports",
type: "boolean",
category: ts.Diagnostics.Module_Resolution_Options,
description: ts.Diagnostics.Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typechecking
},
{
name: "preserveSymlinks",
type: "boolean",
category: ts.Diagnostics.Module_Resolution_Options,
description: ts.Diagnostics.Do_not_resolve_the_real_path_of_symlinks,
},
{
name: "sourceRoot",
type: "string",
isFilePath: true,
paramType: ts.Diagnostics.LOCATION,
category: ts.Diagnostics.Source_Map_Options,
description: ts.Diagnostics.Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations,
},
{
name: "mapRoot",
type: "string",
isFilePath: true,
paramType: ts.Diagnostics.LOCATION,
category: ts.Diagnostics.Source_Map_Options,
description: ts.Diagnostics.Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations,
},
{
name: "inlineSourceMap",
type: "boolean",
category: ts.Diagnostics.Source_Map_Options,
description: ts.Diagnostics.Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file
},
{
name: "inlineSources",
type: "boolean",
category: ts.Diagnostics.Source_Map_Options,
description: ts.Diagnostics.Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap_to_be_set
},
{
name: "experimentalDecorators",
type: "boolean",
category: ts.Diagnostics.Experimental_Options,
description: ts.Diagnostics.Enables_experimental_support_for_ES7_decorators
},
{
name: "emitDecoratorMetadata",
type: "boolean",
category: ts.Diagnostics.Experimental_Options,
description: ts.Diagnostics.Enables_experimental_support_for_emitting_type_metadata_for_decorators
},
{
name: "jsxFactory",
type: "string",
category: ts.Diagnostics.Advanced_Options,
description: ts.Diagnostics.Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h
},
{
name: "diagnostics",
type: "boolean",
category: ts.Diagnostics.Advanced_Options,
description: ts.Diagnostics.Show_diagnostic_information
},
{
name: "extendedDiagnostics",
type: "boolean",
category: ts.Diagnostics.Advanced_Options,
description: ts.Diagnostics.Show_verbose_diagnostic_information
},
{
name: "traceResolution",
type: "boolean",
category: ts.Diagnostics.Advanced_Options,
description: ts.Diagnostics.Enable_tracing_of_the_name_resolution_process
},
{
name: "listFiles",
type: "boolean",
category: ts.Diagnostics.Advanced_Options,
description: ts.Diagnostics.Print_names_of_files_part_of_the_compilation
},
{
name: "listEmittedFiles",
type: "boolean",
category: ts.Diagnostics.Advanced_Options,
description: ts.Diagnostics.Print_names_of_generated_files_part_of_the_compilation
},
{
name: "out",
type: "string",
isFilePath: false,
category: ts.Diagnostics.Advanced_Options,
paramType: ts.Diagnostics.FILE,
description: ts.Diagnostics.Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file,
},
{
name: "reactNamespace",
type: "string",
category: ts.Diagnostics.Advanced_Options,
description: ts.Diagnostics.Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react_JSX_emit
},
{
name: "skipDefaultLibCheck",
type: "boolean",
category: ts.Diagnostics.Advanced_Options,
description: ts.Diagnostics.Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files
},
{
name: "charset",
type: "string",
category: ts.Diagnostics.Advanced_Options,
description: ts.Diagnostics.The_character_set_of_the_input_files
},
{
name: "emitBOM",
type: "boolean",
category: ts.Diagnostics.Advanced_Options,
description: ts.Diagnostics.Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files
},
{
name: "locale",
type: "string",
category: ts.Diagnostics.Advanced_Options,
description: ts.Diagnostics.The_locale_used_when_displaying_messages_to_the_user_e_g_en_us
},
{
name: "newLine",
type: ts.createMapFromTemplate({
"crlf": 0,
"lf": 1
}),
paramType: ts.Diagnostics.NEWLINE,
category: ts.Diagnostics.Advanced_Options,
description: ts.Diagnostics.Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix,
},
{
name: "noErrorTruncation",
type: "boolean",
category: ts.Diagnostics.Advanced_Options,
description: ts.Diagnostics.Do_not_truncate_error_messages
},
{
name: "noLib",
type: "boolean",
category: ts.Diagnostics.Advanced_Options,
description: ts.Diagnostics.Do_not_include_the_default_library_file_lib_d_ts
},
{
name: "noResolve",
type: "boolean",
category: ts.Diagnostics.Advanced_Options,
description: ts.Diagnostics.Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files
},
{
name: "stripInternal",
type: "boolean",
category: ts.Diagnostics.Advanced_Options,
description: ts.Diagnostics.Do_not_emit_declarations_for_code_that_has_an_internal_annotation,
},
{
name: "disableSizeLimit",
type: "boolean",
category: ts.Diagnostics.Advanced_Options,
description: ts.Diagnostics.Disable_size_limitations_on_JavaScript_projects
},
{
name: "noImplicitUseStrict",
type: "boolean",
category: ts.Diagnostics.Advanced_Options,
description: ts.Diagnostics.Do_not_emit_use_strict_directives_in_module_output
},
{
name: "noEmitHelpers",
type: "boolean",
category: ts.Diagnostics.Advanced_Options,
description: ts.Diagnostics.Do_not_generate_custom_helper_functions_like_extends_in_compiled_output
},
{
name: "noEmitOnError",
type: "boolean",
category: ts.Diagnostics.Advanced_Options,
description: ts.Diagnostics.Do_not_emit_outputs_if_any_errors_were_reported,
},
{
name: "preserveConstEnums",
type: "boolean",
category: ts.Diagnostics.Advanced_Options,
description: ts.Diagnostics.Do_not_erase_const_enum_declarations_in_generated_code
},
{
name: "declarationDir",
type: "string",
isFilePath: true,
paramType: ts.Diagnostics.DIRECTORY,
category: ts.Diagnostics.Advanced_Options,
description: ts.Diagnostics.Output_directory_for_generated_declaration_files
},
{
name: "skipLibCheck",
type: "boolean",
category: ts.Diagnostics.Advanced_Options,
description: ts.Diagnostics.Skip_type_checking_of_declaration_files,
},
{
name: "allowUnusedLabels",
type: "boolean",
category: ts.Diagnostics.Advanced_Options,
description: ts.Diagnostics.Do_not_report_errors_on_unused_labels
},
{
name: "allowUnreachableCode",
type: "boolean",
category: ts.Diagnostics.Advanced_Options,
description: ts.Diagnostics.Do_not_report_errors_on_unreachable_code
},
{
name: "suppressExcessPropertyErrors",
type: "boolean",
category: ts.Diagnostics.Advanced_Options,
description: ts.Diagnostics.Suppress_excess_property_checks_for_object_literals,
},
{
name: "suppressImplicitAnyIndexErrors",
type: "boolean",
category: ts.Diagnostics.Advanced_Options,
description: ts.Diagnostics.Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures,
},
{
name: "forceConsistentCasingInFileNames",
type: "boolean",
category: ts.Diagnostics.Advanced_Options,
description: ts.Diagnostics.Disallow_inconsistently_cased_references_to_the_same_file
},
{
name: "maxNodeModuleJsDepth",
type: "number",
category: ts.Diagnostics.Advanced_Options,
description: ts.Diagnostics.The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files
},
{
name: "noStrictGenericChecks",
type: "boolean",
category: ts.Diagnostics.Advanced_Options,
description: ts.Diagnostics.Disable_strict_checking_of_generic_signatures_in_function_types,
},
{
name: "plugins",
type: "list",
isTSConfigOnly: true,
element: {
name: "plugin",
type: "object"
},
description: ts.Diagnostics.List_of_language_service_plugins
}
];
ts.typeAcquisitionDeclarations = [
{
name: "enableAutoDiscovery",
type: "boolean",
},
{
name: "enable",
type: "boolean",
},
{
name: "include",
type: "list",
element: {
name: "include",
type: "string"
}
},
{
name: "exclude",
type: "list",
element: {
name: "exclude",
type: "string"
}
}
];
ts.defaultInitCompilerOptions = {
module: ts.ModuleKind.CommonJS,
target: 1,
strict: true
};
var optionNameMapCache;
function convertEnableAutoDiscoveryToEnable(typeAcquisition) {
if (typeAcquisition && typeAcquisition.enableAutoDiscovery !== undefined && typeAcquisition.enable === undefined) {
var result = {
enable: typeAcquisition.enableAutoDiscovery,
include: typeAcquisition.include || [],
exclude: typeAcquisition.exclude || []
};
return result;
}
return typeAcquisition;
}
ts.convertEnableAutoDiscoveryToEnable = convertEnableAutoDiscoveryToEnable;
function getOptionNameMap() {
if (optionNameMapCache) {
return optionNameMapCache;
}
var optionNameMap = ts.createMap();
var shortOptionNames = ts.createMap();
ts.forEach(ts.optionDeclarations, function (option) {
optionNameMap.set(option.name.toLowerCase(), option);
if (option.shortName) {
shortOptionNames.set(option.shortName, option.name);
}
});
optionNameMapCache = { optionNameMap: optionNameMap, shortOptionNames: shortOptionNames };
return optionNameMapCache;
}
function createCompilerDiagnosticForInvalidCustomType(opt) {
return createDiagnosticForInvalidCustomType(opt, ts.createCompilerDiagnostic);
}
ts.createCompilerDiagnosticForInvalidCustomType = createCompilerDiagnosticForInvalidCustomType;
function createDiagnosticForInvalidCustomType(opt, createDiagnostic) {
var namesOfType = ts.arrayFrom(opt.type.keys()).map(function (key) { return "'" + key + "'"; }).join(", ");
return createDiagnostic(ts.Diagnostics.Argument_for_0_option_must_be_Colon_1, "--" + opt.name, namesOfType);
}
function parseCustomTypeOption(opt, value, errors) {
return convertJsonOptionOfCustomType(opt, trimString(value || ""), errors);
}
ts.parseCustomTypeOption = parseCustomTypeOption;
function parseListTypeOption(opt, value, errors) {
if (value === void 0) { value = ""; }
value = trimString(value);
if (ts.startsWith(value, "-")) {
return undefined;
}
if (value === "") {
return [];
}
var values = value.split(",");
switch (opt.element.type) {
case "number":
return ts.map(values, parseInt);
case "string":
return ts.map(values, function (v) { return v || ""; });
default:
return ts.filter(ts.map(values, function (v) { return parseCustomTypeOption(opt.element, v, errors); }), function (v) { return !!v; });
}
}
ts.parseListTypeOption = parseListTypeOption;
function parseCommandLine(commandLine, readFile) {
var options = {};
var fileNames = [];
var errors = [];
parseStrings(commandLine);
return {
options: options,
fileNames: fileNames,
errors: errors
};
function parseStrings(args) {
var i = 0;
while (i < args.length) {
var s = args[i];
i++;
if (s.charCodeAt(0) === 64) {
parseResponseFile(s.slice(1));
}
else if (s.charCodeAt(0) === 45) {
var opt = getOptionFromName(s.slice(s.charCodeAt(1) === 45 ? 2 : 1), true);
if (opt) {
if (opt.isTSConfigOnly) {
errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Option_0_can_only_be_specified_in_tsconfig_json_file, opt.name));
}
else {
if (!args[i] && opt.type !== "boolean") {
errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Compiler_option_0_expects_an_argument, opt.name));
}
switch (opt.type) {
case "number":
options[opt.name] = parseInt(args[i]);
i++;
break;
case "boolean":
var optValue = args[i];
options[opt.name] = optValue !== "false";
if (optValue === "false" || optValue === "true") {
i++;
}
break;
case "string":
options[opt.name] = args[i] || "";
i++;
break;
case "list":
var result = parseListTypeOption(opt, args[i], errors);
options[opt.name] = result || [];
if (result) {
i++;
}
break;
default:
options[opt.name] = parseCustomTypeOption(opt, args[i], errors);
i++;
break;
}
}
}
else {
errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unknown_compiler_option_0, s));
}
}
else {
fileNames.push(s);
}
}
}
function parseResponseFile(fileName) {
var text = readFile ? readFile(fileName) : ts.sys.readFile(fileName);
if (!text) {
errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.File_0_not_found, fileName));
return;
}
var args = [];
var pos = 0;
while (true) {
while (pos < text.length && text.charCodeAt(pos) <= 32)
pos++;
if (pos >= text.length)
break;
var start = pos;
if (text.charCodeAt(start) === 34) {
pos++;
while (pos < text.length && text.charCodeAt(pos) !== 34)
pos++;
if (pos < text.length) {
args.push(text.substring(start + 1, pos));
pos++;
}
else {
errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unterminated_quoted_string_in_response_file_0, fileName));
}
}
else {
while (text.charCodeAt(pos) > 32)
pos++;
args.push(text.substring(start, pos));
}
}
parseStrings(args);
}
}
ts.parseCommandLine = parseCommandLine;
function getOptionFromName(optionName, allowShort) {
if (allowShort === void 0) { allowShort = false; }
optionName = optionName.toLowerCase();
var _a = getOptionNameMap(), optionNameMap = _a.optionNameMap, shortOptionNames = _a.shortOptionNames;
if (allowShort) {
var short = shortOptionNames.get(optionName);
if (short !== undefined) {
optionName = short;
}
}
return optionNameMap.get(optionName);
}
function readConfigFile(fileName, readFile) {
var textOrDiagnostic = tryReadFile(fileName, readFile);
return ts.isString(textOrDiagnostic) ? parseConfigFileTextToJson(fileName, textOrDiagnostic) : { config: {}, error: textOrDiagnostic };
}
ts.readConfigFile = readConfigFile;
function parseConfigFileTextToJson(fileName, jsonText) {
var jsonSourceFile = ts.parseJsonText(fileName, jsonText);
return {
config: convertToObject(jsonSourceFile, jsonSourceFile.parseDiagnostics),
error: jsonSourceFile.parseDiagnostics.length ? jsonSourceFile.parseDiagnostics[0] : undefined
};
}
ts.parseConfigFileTextToJson = parseConfigFileTextToJson;
function readJsonConfigFile(fileName, readFile) {
var textOrDiagnostic = tryReadFile(fileName, readFile);
return ts.isString(textOrDiagnostic) ? ts.parseJsonText(fileName, textOrDiagnostic) : { parseDiagnostics: [textOrDiagnostic] };
}
ts.readJsonConfigFile = readJsonConfigFile;
function tryReadFile(fileName, readFile) {
var text;
try {
text = readFile(fileName);
}
catch (e) {
return ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_read_file_0_Colon_1, fileName, e.message);
}
return text === undefined ? ts.createCompilerDiagnostic(ts.Diagnostics.The_specified_path_does_not_exist_Colon_0, fileName) : text;
}
function commandLineOptionsToMap(options) {
return ts.arrayToMap(options, function (option) { return option.name; });
}
var _tsconfigRootOptions;
function getTsconfigRootOptionsMap() {
if (_tsconfigRootOptions === undefined) {
_tsconfigRootOptions = commandLineOptionsToMap([
{
name: "compilerOptions",
type: "object",
elementOptions: commandLineOptionsToMap(ts.optionDeclarations),
extraKeyDiagnosticMessage: ts.Diagnostics.Unknown_compiler_option_0
},
{
name: "typingOptions",
type: "object",
elementOptions: commandLineOptionsToMap(ts.typeAcquisitionDeclarations),
extraKeyDiagnosticMessage: ts.Diagnostics.Unknown_type_acquisition_option_0
},
{
name: "typeAcquisition",
type: "object",
elementOptions: commandLineOptionsToMap(ts.typeAcquisitionDeclarations),
extraKeyDiagnosticMessage: ts.Diagnostics.Unknown_type_acquisition_option_0
},
{
name: "extends",
type: "string"
},
{
name: "files",
type: "list",
element: {
name: "files",
type: "string"
}
},
{
name: "include",
type: "list",
element: {
name: "include",
type: "string"
}
},
{
name: "exclude",
type: "list",
element: {
name: "exclude",
type: "string"
}
},
ts.compileOnSaveCommandLineOption
]);
}
return _tsconfigRootOptions;
}
function convertToObject(sourceFile, errors) {
return convertToObjectWorker(sourceFile, errors, undefined, undefined);
}
ts.convertToObject = convertToObject;
function convertToObjectWorker(sourceFile, errors, knownRootOptions, jsonConversionNotifier) {
if (!sourceFile.jsonObject) {
return {};
}
return convertObjectLiteralExpressionToJson(sourceFile.jsonObject, knownRootOptions, undefined, undefined);
function convertObjectLiteralExpressionToJson(node, knownOptions, extraKeyDiagnosticMessage, parentOption) {
var result = {};
for (var _i = 0, _a = node.properties; _i < _a.length; _i++) {
var element = _a[_i];
if (element.kind !== 261) {
errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, element, ts.Diagnostics.Property_assignment_expected));
continue;
}
if (element.questionToken) {
errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, element.questionToken, ts.Diagnostics._0_can_only_be_used_in_a_ts_file, "?"));
}
if (!isDoubleQuotedString(element.name)) {
errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, element.name, ts.Diagnostics.String_literal_with_double_quotes_expected));
}
var keyText = ts.unescapeLeadingUnderscores(ts.getTextOfPropertyName(element.name));
var option = knownOptions ? knownOptions.get(keyText) : undefined;
if (extraKeyDiagnosticMessage && !option) {
errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, element.name, extraKeyDiagnosticMessage, keyText));
}
var value = convertPropertyValueToJson(element.initializer, option);
if (typeof keyText !== "undefined") {
result[keyText] = value;
if (jsonConversionNotifier &&
(parentOption || knownOptions === knownRootOptions)) {
var isValidOptionValue = isCompilerOptionsValue(option, value);
if (parentOption) {
if (isValidOptionValue) {
jsonConversionNotifier.onSetValidOptionKeyValueInParent(parentOption, option, value);
}
}
else if (knownOptions === knownRootOptions) {
if (isValidOptionValue) {
jsonConversionNotifier.onSetValidOptionKeyValueInRoot(keyText, element.name, value, element.initializer);
}
else if (!option) {
jsonConversionNotifier.onSetUnknownOptionKeyValueInRoot(keyText, element.name, value, element.initializer);
}
}
}
}
}
return result;
}
function convertArrayLiteralExpressionToJson(elements, elementOption) {
return elements.map(function (element) { return convertPropertyValueToJson(element, elementOption); });
}
function convertPropertyValueToJson(valueExpression, option) {
switch (valueExpression.kind) {
case 101:
reportInvalidOptionValue(option && option.type !== "boolean");
return true;
case 86:
reportInvalidOptionValue(option && option.type !== "boolean");
return false;
case 95:
reportInvalidOptionValue(option && option.name === "extends");
return null;
case 9:
if (!isDoubleQuotedString(valueExpression)) {
errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, valueExpression, ts.Diagnostics.String_literal_with_double_quotes_expected));
}
reportInvalidOptionValue(option && (ts.isString(option.type) && option.type !== "string"));
var text = valueExpression.text;
if (option && !ts.isString(option.type)) {
var customOption = option;
if (!customOption.type.has(text.toLowerCase())) {
errors.push(createDiagnosticForInvalidCustomType(customOption, function (message, arg0, arg1) { return ts.createDiagnosticForNodeInSourceFile(sourceFile, valueExpression, message, arg0, arg1); }));
}
}
return text;
case 8:
reportInvalidOptionValue(option && option.type !== "number");
return Number(valueExpression.text);
case 178:
reportInvalidOptionValue(option && option.type !== "object");
var objectLiteralExpression = valueExpression;
if (option) {
var _a = option, elementOptions = _a.elementOptions, extraKeyDiagnosticMessage = _a.extraKeyDiagnosticMessage, optionName = _a.name;
return convertObjectLiteralExpressionToJson(objectLiteralExpression, elementOptions, extraKeyDiagnosticMessage, optionName);
}
else {
return convertObjectLiteralExpressionToJson(objectLiteralExpression, undefined, undefined, undefined);
}
case 177:
reportInvalidOptionValue(option && option.type !== "list");
return convertArrayLiteralExpressionToJson(valueExpression.elements, option && option.element);
}
if (option) {
reportInvalidOptionValue(true);
}
else {
errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, valueExpression, ts.Diagnostics.Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_literal));
}
return undefined;
function reportInvalidOptionValue(isError) {
if (isError) {
errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, valueExpression, ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, option.name, getCompilerOptionValueTypeString(option)));
}
}
}
function isDoubleQuotedString(node) {
return ts.isStringLiteral(node) && ts.isStringDoubleQuoted(node, sourceFile);
}
}
function getCompilerOptionValueTypeString(option) {
return option.type === "list" ?
"Array" :
ts.isString(option.type) ? option.type : "string";
}
function isCompilerOptionsValue(option, value) {
if (option) {
if (isNullOrUndefined(value))
return true;
if (option.type === "list") {
return ts.isArray(value);
}
var expectedType = ts.isString(option.type) ? option.type : "string";
return typeof value === expectedType;
}
}
function generateTSConfig(options, fileNames, newLine) {
var compilerOptions = ts.extend(options, ts.defaultInitCompilerOptions);
var compilerOptionsMap = serializeCompilerOptions(compilerOptions);
return writeConfigurations();
function getCustomTypeMapOfCommandLineOption(optionDefinition) {
if (optionDefinition.type === "string" || optionDefinition.type === "number" || optionDefinition.type === "boolean") {
return undefined;
}
else if (optionDefinition.type === "list") {
return getCustomTypeMapOfCommandLineOption(optionDefinition.element);
}
else {
return optionDefinition.type;
}
}
function getNameOfCompilerOptionValue(value, customTypeMap) {
return ts.forEachEntry(customTypeMap, function (mapValue, key) {
if (mapValue === value) {
return key;
}
});
}
function serializeCompilerOptions(options) {
var result = ts.createMap();
var optionsNameMap = getOptionNameMap().optionNameMap;
var _loop_5 = function (name) {
if (ts.hasProperty(options, name)) {
if (optionsNameMap.has(name) && optionsNameMap.get(name).category === ts.Diagnostics.Command_line_Options) {
return "continue";
}
var value = options[name];
var optionDefinition = optionsNameMap.get(name.toLowerCase());
if (optionDefinition) {
var customTypeMap_1 = getCustomTypeMapOfCommandLineOption(optionDefinition);
if (!customTypeMap_1) {
result.set(name, value);
}
else {
if (optionDefinition.type === "list") {
result.set(name, value.map(function (element) { return getNameOfCompilerOptionValue(element, customTypeMap_1); }));
}
else {
result.set(name, getNameOfCompilerOptionValue(value, customTypeMap_1));
}
}
}
}
};
for (var name in options) {
_loop_5(name);
}
return result;
}
function getDefaultValueForOption(option) {
switch (option.type) {
case "number":
return 1;
case "boolean":
return true;
case "string":
return option.isFilePath ? "./" : "";
case "list":
return [];
case "object":
return {};
default:
return option.type.keys().next().value;
}
}
function makePadding(paddingLength) {
return Array(paddingLength + 1).join(" ");
}
function writeConfigurations() {
var categorizedOptions = ts.createMultiMap();
for (var _i = 0, optionDeclarations_1 = ts.optionDeclarations; _i < optionDeclarations_1.length; _i++) {
var option = optionDeclarations_1[_i];
var category = option.category;
if (category !== undefined && category !== ts.Diagnostics.Command_line_Options && category !== ts.Diagnostics.Advanced_Options) {
categorizedOptions.add(ts.getLocaleSpecificMessage(category), option);
}
}
var marginLength = 0;
var seenKnownKeys = 0;
var nameColumn = [];
var descriptionColumn = [];
categorizedOptions.forEach(function (options, category) {
if (nameColumn.length !== 0) {
nameColumn.push("");
descriptionColumn.push("");
}
nameColumn.push("/* " + category + " */");
descriptionColumn.push("");
for (var _i = 0, options_1 = options; _i < options_1.length; _i++) {
var option = options_1[_i];
var optionName = void 0;
if (compilerOptionsMap.has(option.name)) {
optionName = "\"" + option.name + "\": " + JSON.stringify(compilerOptionsMap.get(option.name)) + ((seenKnownKeys += 1) === compilerOptionsMap.size ? "" : ",");
}
else {
optionName = "// \"" + option.name + "\": " + JSON.stringify(getDefaultValueForOption(option)) + ",";
}
nameColumn.push(optionName);
descriptionColumn.push("/* " + (option.description && ts.getLocaleSpecificMessage(option.description) || option.name) + " */");
marginLength = Math.max(optionName.length, marginLength);
}
});
var tab = makePadding(2);
var result = [];
result.push("{");
result.push(tab + "\"compilerOptions\": {");
for (var i = 0; i < nameColumn.length; i++) {
var optionName = nameColumn[i];
var description = descriptionColumn[i];
result.push(optionName && "" + tab + tab + optionName + (description && (makePadding(marginLength - optionName.length + 2) + description)));
}
if (fileNames.length) {
result.push(tab + "},");
result.push(tab + "\"files\": [");
for (var i = 0; i < fileNames.length; i++) {
result.push("" + tab + tab + JSON.stringify(fileNames[i]) + (i === fileNames.length - 1 ? "" : ","));
}
result.push(tab + "]");
}
else {
result.push(tab + "}");
}
result.push("}");
return result.join(newLine);
}
}
ts.generateTSConfig = generateTSConfig;
function parseJsonConfigFileContent(json, host, basePath, existingOptions, configFileName, resolutionStack, extraFileExtensions) {
return parseJsonConfigFileContentWorker(json, undefined, host, basePath, existingOptions, configFileName, resolutionStack, extraFileExtensions);
}
ts.parseJsonConfigFileContent = parseJsonConfigFileContent;
function parseJsonSourceFileConfigFileContent(sourceFile, host, basePath, existingOptions, configFileName, resolutionStack, extraFileExtensions) {
return parseJsonConfigFileContentWorker(undefined, sourceFile, host, basePath, existingOptions, configFileName, resolutionStack, extraFileExtensions);
}
ts.parseJsonSourceFileConfigFileContent = parseJsonSourceFileConfigFileContent;
function setConfigFileInOptions(options, configFile) {
if (configFile) {
Object.defineProperty(options, "configFile", { enumerable: false, writable: false, value: configFile });
}
}
ts.setConfigFileInOptions = setConfigFileInOptions;
function isNullOrUndefined(x) {
return x === undefined || x === null;
}
function directoryOfCombinedPath(fileName, basePath) {
return ts.getDirectoryPath(ts.toPath(fileName, basePath, ts.identity));
}
function parseJsonConfigFileContentWorker(json, sourceFile, host, basePath, existingOptions, configFileName, resolutionStack, extraFileExtensions) {
if (existingOptions === void 0) { existingOptions = {}; }
if (resolutionStack === void 0) { resolutionStack = []; }
if (extraFileExtensions === void 0) { extraFileExtensions = []; }
ts.Debug.assert((json === undefined && sourceFile !== undefined) || (json !== undefined && sourceFile === undefined));
var errors = [];
var getCanonicalFileName = ts.createGetCanonicalFileName(host.useCaseSensitiveFileNames);
var parsedConfig = parseConfig(json, sourceFile, host, basePath, configFileName, getCanonicalFileName, resolutionStack, errors);
var raw = parsedConfig.raw;
var options = ts.extend(existingOptions, parsedConfig.options || {});
options.configFilePath = configFileName;
setConfigFileInOptions(options, sourceFile);
var _a = getFileNames(), fileNames = _a.fileNames, wildcardDirectories = _a.wildcardDirectories, spec = _a.spec;
return {
options: options,
fileNames: fileNames,
typeAcquisition: parsedConfig.typeAcquisition || getDefaultTypeAcquisition(),
raw: raw,
errors: errors,
wildcardDirectories: wildcardDirectories,
compileOnSave: !!raw.compileOnSave,
configFileSpecs: spec
};
function getFileNames() {
var filesSpecs;
if (ts.hasProperty(raw, "files") && !isNullOrUndefined(raw.files)) {
if (ts.isArray(raw.files)) {
filesSpecs = raw.files;
if (filesSpecs.length === 0) {
createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.The_files_list_in_config_file_0_is_empty, configFileName || "tsconfig.json");
}
}
else {
createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "files", "Array");
}
}
var includeSpecs;
if (ts.hasProperty(raw, "include") && !isNullOrUndefined(raw.include)) {
if (ts.isArray(raw.include)) {
includeSpecs = raw.include;
}
else {
createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "include", "Array");
}
}
var excludeSpecs;
if (ts.hasProperty(raw, "exclude") && !isNullOrUndefined(raw.exclude)) {
if (ts.isArray(raw.exclude)) {
excludeSpecs = raw.exclude;
}
else {
createCompilerDiagnosticOnlyIfJson(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "exclude", "Array");
}
}
else {
var outDir = raw.compilerOptions && raw.compilerOptions.outDir;
if (outDir) {
excludeSpecs = [outDir];
}
}
if (filesSpecs === undefined && includeSpecs === undefined) {
includeSpecs = ["**/*"];
}
var result = matchFileNames(filesSpecs, includeSpecs, excludeSpecs, configFileName ? directoryOfCombinedPath(configFileName, basePath) : basePath, options, host, errors, extraFileExtensions, sourceFile);
if (result.fileNames.length === 0 && !ts.hasProperty(raw, "files") && resolutionStack.length === 0) {
errors.push(getErrorForNoInputFiles(result.spec, configFileName));
}
return result;
}
function createCompilerDiagnosticOnlyIfJson(message, arg0, arg1) {
if (!sourceFile) {
errors.push(ts.createCompilerDiagnostic(message, arg0, arg1));
}
}
}
function isErrorNoInputFiles(error) {
return error.code === ts.Diagnostics.No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2.code;
}
ts.isErrorNoInputFiles = isErrorNoInputFiles;
function getErrorForNoInputFiles(_a, configFileName) {
var includeSpecs = _a.includeSpecs, excludeSpecs = _a.excludeSpecs;
return ts.createCompilerDiagnostic(ts.Diagnostics.No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2, configFileName || "tsconfig.json", JSON.stringify(includeSpecs || []), JSON.stringify(excludeSpecs || []));
}
ts.getErrorForNoInputFiles = getErrorForNoInputFiles;
function isSuccessfulParsedTsconfig(value) {
return !!value.options;
}
function parseConfig(json, sourceFile, host, basePath, configFileName, getCanonicalFileName, resolutionStack, errors) {
basePath = ts.normalizeSlashes(basePath);
var resolvedPath = ts.toPath(configFileName || "", basePath, getCanonicalFileName);
if (resolutionStack.indexOf(resolvedPath) >= 0) {
errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Circularity_detected_while_resolving_configuration_Colon_0, resolutionStack.concat([resolvedPath]).join(" -> ")));
return { raw: json || convertToObject(sourceFile, errors) };
}
var ownConfig = json ?
parseOwnConfigOfJson(json, host, basePath, getCanonicalFileName, configFileName, errors) :
parseOwnConfigOfJsonSourceFile(sourceFile, host, basePath, getCanonicalFileName, configFileName, errors);
if (ownConfig.extendedConfigPath) {
resolutionStack = resolutionStack.concat([resolvedPath]);
var extendedConfig = getExtendedConfig(sourceFile, ownConfig.extendedConfigPath, host, basePath, getCanonicalFileName, resolutionStack, errors);
if (extendedConfig && isSuccessfulParsedTsconfig(extendedConfig)) {
var baseRaw_1 = extendedConfig.raw;
var raw_1 = ownConfig.raw;
var setPropertyInRawIfNotUndefined = function (propertyName) {
var value = raw_1[propertyName] || baseRaw_1[propertyName];
if (value) {
raw_1[propertyName] = value;
}
};
setPropertyInRawIfNotUndefined("include");
setPropertyInRawIfNotUndefined("exclude");
setPropertyInRawIfNotUndefined("files");
if (raw_1.compileOnSave === undefined) {
raw_1.compileOnSave = baseRaw_1.compileOnSave;
}
ownConfig.options = ts.assign({}, extendedConfig.options, ownConfig.options);
}
}
return ownConfig;
}
function parseOwnConfigOfJson(json, host, basePath, getCanonicalFileName, configFileName, errors) {
if (ts.hasProperty(json, "excludes")) {
errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Unknown_option_excludes_Did_you_mean_exclude));
}
var options = convertCompilerOptionsFromJsonWorker(json.compilerOptions, basePath, errors, configFileName);
var typeAcquisition = convertTypeAcquisitionFromJsonWorker(json.typeAcquisition || json.typingOptions, basePath, errors, configFileName);
json.compileOnSave = convertCompileOnSaveOptionFromJson(json, basePath, errors);
var extendedConfigPath;
if (json.extends) {
if (!ts.isString(json.extends)) {
errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "extends", "string"));
}
else {
var newBase = configFileName ? directoryOfCombinedPath(configFileName, basePath) : basePath;
extendedConfigPath = getExtendsConfigPath(json.extends, host, newBase, getCanonicalFileName, errors, ts.createCompilerDiagnostic);
}
}
return { raw: json, options: options, typeAcquisition: typeAcquisition, extendedConfigPath: extendedConfigPath };
}
function parseOwnConfigOfJsonSourceFile(sourceFile, host, basePath, getCanonicalFileName, configFileName, errors) {
var options = getDefaultCompilerOptions(configFileName);
var typeAcquisition, typingOptionstypeAcquisition;
var extendedConfigPath;
var optionsIterator = {
onSetValidOptionKeyValueInParent: function (parentOption, option, value) {
ts.Debug.assert(parentOption === "compilerOptions" || parentOption === "typeAcquisition" || parentOption === "typingOptions");
var currentOption = parentOption === "compilerOptions" ?
options :
parentOption === "typeAcquisition" ?
(typeAcquisition || (typeAcquisition = getDefaultTypeAcquisition(configFileName))) :
(typingOptionstypeAcquisition || (typingOptionstypeAcquisition = getDefaultTypeAcquisition(configFileName)));
currentOption[option.name] = normalizeOptionValue(option, basePath, value);
},
onSetValidOptionKeyValueInRoot: function (key, _keyNode, value, valueNode) {
switch (key) {
case "extends":
var newBase = configFileName ? directoryOfCombinedPath(configFileName, basePath) : basePath;
extendedConfigPath = getExtendsConfigPath(value, host, newBase, getCanonicalFileName, errors, function (message, arg0) {
return ts.createDiagnosticForNodeInSourceFile(sourceFile, valueNode, message, arg0);
});
return;
case "files":
if (value.length === 0) {
errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, valueNode, ts.Diagnostics.The_files_list_in_config_file_0_is_empty, configFileName || "tsconfig.json"));
}
return;
}
},
onSetUnknownOptionKeyValueInRoot: function (key, keyNode, _value, _valueNode) {
if (key === "excludes") {
errors.push(ts.createDiagnosticForNodeInSourceFile(sourceFile, keyNode, ts.Diagnostics.Unknown_option_excludes_Did_you_mean_exclude));
}
}
};
var json = convertToObjectWorker(sourceFile, errors, getTsconfigRootOptionsMap(), optionsIterator);
if (!typeAcquisition) {
if (typingOptionstypeAcquisition) {
typeAcquisition = (typingOptionstypeAcquisition.enableAutoDiscovery !== undefined) ?
{
enable: typingOptionstypeAcquisition.enableAutoDiscovery,
include: typingOptionstypeAcquisition.include,
exclude: typingOptionstypeAcquisition.exclude
} :
typingOptionstypeAcquisition;
}
else {
typeAcquisition = getDefaultTypeAcquisition(configFileName);
}
}
return { raw: json, options: options, typeAcquisition: typeAcquisition, extendedConfigPath: extendedConfigPath };
}
function getExtendsConfigPath(extendedConfig, host, basePath, getCanonicalFileName, errors, createDiagnostic) {
extendedConfig = ts.normalizeSlashes(extendedConfig);
if (!(ts.isRootedDiskPath(extendedConfig) || ts.startsWith(extendedConfig, "./") || ts.startsWith(extendedConfig, "../"))) {
errors.push(createDiagnostic(ts.Diagnostics.A_path_in_an_extends_option_must_be_relative_or_rooted_but_0_is_not, extendedConfig));
return undefined;
}
var extendedConfigPath = ts.toPath(extendedConfig, basePath, getCanonicalFileName);
if (!host.fileExists(extendedConfigPath) && !ts.endsWith(extendedConfigPath, ".json")) {
extendedConfigPath = extendedConfigPath + ".json";
if (!host.fileExists(extendedConfigPath)) {
errors.push(createDiagnostic(ts.Diagnostics.File_0_does_not_exist, extendedConfig));
return undefined;
}
}
return extendedConfigPath;
}
function getExtendedConfig(sourceFile, extendedConfigPath, host, basePath, getCanonicalFileName, resolutionStack, errors) {
var extendedResult = readJsonConfigFile(extendedConfigPath, function (path) { return host.readFile(path); });
if (sourceFile) {
(sourceFile.extendedSourceFiles || (sourceFile.extendedSourceFiles = [])).push(extendedResult.fileName);
}
if (extendedResult.parseDiagnostics.length) {
errors.push.apply(errors, extendedResult.parseDiagnostics);
return undefined;
}
var extendedDirname = ts.getDirectoryPath(extendedConfigPath);
var extendedConfig = parseConfig(undefined, extendedResult, host, extendedDirname, ts.getBaseFileName(extendedConfigPath), getCanonicalFileName, resolutionStack, errors);
if (sourceFile) {
(_a = sourceFile.extendedSourceFiles).push.apply(_a, extendedResult.extendedSourceFiles);
}
if (isSuccessfulParsedTsconfig(extendedConfig)) {
var relativeDifference_1 = ts.convertToRelativePath(extendedDirname, basePath, getCanonicalFileName);
var updatePath_1 = function (path) { return ts.isRootedDiskPath(path) ? path : ts.combinePaths(relativeDifference_1, path); };
var mapPropertiesInRawIfNotUndefined = function (propertyName) {
if (raw_2[propertyName]) {
raw_2[propertyName] = ts.map(raw_2[propertyName], updatePath_1);
}
};
var raw_2 = extendedConfig.raw;
mapPropertiesInRawIfNotUndefined("include");
mapPropertiesInRawIfNotUndefined("exclude");
mapPropertiesInRawIfNotUndefined("files");
}
return extendedConfig;
var _a;
}
function convertCompileOnSaveOptionFromJson(jsonOption, basePath, errors) {
if (!ts.hasProperty(jsonOption, ts.compileOnSaveCommandLineOption.name)) {
return undefined;
}
var result = convertJsonOption(ts.compileOnSaveCommandLineOption, jsonOption.compileOnSave, basePath, errors);
if (typeof result === "boolean" && result) {
return result;
}
return false;
}
function convertCompilerOptionsFromJson(jsonOptions, basePath, configFileName) {
var errors = [];
var options = convertCompilerOptionsFromJsonWorker(jsonOptions, basePath, errors, configFileName);
return { options: options, errors: errors };
}
ts.convertCompilerOptionsFromJson = convertCompilerOptionsFromJson;
function convertTypeAcquisitionFromJson(jsonOptions, basePath, configFileName) {
var errors = [];
var options = convertTypeAcquisitionFromJsonWorker(jsonOptions, basePath, errors, configFileName);
return { options: options, errors: errors };
}
ts.convertTypeAcquisitionFromJson = convertTypeAcquisitionFromJson;
function getDefaultCompilerOptions(configFileName) {
var options = ts.getBaseFileName(configFileName) === "jsconfig.json"
? { allowJs: true, maxNodeModuleJsDepth: 2, allowSyntheticDefaultImports: true, skipLibCheck: true }
: {};
return options;
}
function convertCompilerOptionsFromJsonWorker(jsonOptions, basePath, errors, configFileName) {
var options = getDefaultCompilerOptions(configFileName);
convertOptionsFromJson(ts.optionDeclarations, jsonOptions, basePath, options, ts.Diagnostics.Unknown_compiler_option_0, errors);
return options;
}
function getDefaultTypeAcquisition(configFileName) {
var options = { enable: ts.getBaseFileName(configFileName) === "jsconfig.json", include: [], exclude: [] };
return options;
}
function convertTypeAcquisitionFromJsonWorker(jsonOptions, basePath, errors, configFileName) {
var options = getDefaultTypeAcquisition(configFileName);
var typeAcquisition = convertEnableAutoDiscoveryToEnable(jsonOptions);
convertOptionsFromJson(ts.typeAcquisitionDeclarations, typeAcquisition, basePath, options, ts.Diagnostics.Unknown_type_acquisition_option_0, errors);
return options;
}
function convertOptionsFromJson(optionDeclarations, jsonOptions, basePath, defaultOptions, diagnosticMessage, errors) {
if (!jsonOptions) {
return;
}
var optionNameMap = commandLineOptionsToMap(optionDeclarations);
for (var id in jsonOptions) {
var opt = optionNameMap.get(id);
if (opt) {
defaultOptions[opt.name] = convertJsonOption(opt, jsonOptions[id], basePath, errors);
}
else {
errors.push(ts.createCompilerDiagnostic(diagnosticMessage, id));
}
}
}
function convertJsonOption(opt, value, basePath, errors) {
if (isCompilerOptionsValue(opt, value)) {
var optType = opt.type;
if (optType === "list" && ts.isArray(value)) {
return convertJsonOptionOfListType(opt, value, basePath, errors);
}
else if (!ts.isString(optType)) {
return convertJsonOptionOfCustomType(opt, value, errors);
}
return normalizeNonListOptionValue(opt, basePath, value);
}
else {
errors.push(ts.createCompilerDiagnostic(ts.Diagnostics.Compiler_option_0_requires_a_value_of_type_1, opt.name, getCompilerOptionValueTypeString(opt)));
}
}
function normalizeOptionValue(option, basePath, value) {
if (isNullOrUndefined(value))
return undefined;
if (option.type === "list") {
var listOption_1 = option;
if (listOption_1.element.isFilePath || !ts.isString(listOption_1.element.type)) {
return ts.filter(ts.map(value, function (v) { return normalizeOptionValue(listOption_1.element, basePath, v); }), function (v) { return !!v; });
}
return value;
}
else if (!ts.isString(option.type)) {
return option.type.get(ts.isString(value) ? value.toLowerCase() : value);
}
return normalizeNonListOptionValue(option, basePath, value);
}
function normalizeNonListOptionValue(option, basePath, value) {
if (option.isFilePath) {
value = ts.normalizePath(ts.combinePaths(basePath, value));
if (value === "") {
value = ".";
}
}
return value;
}
function convertJsonOptionOfCustomType(opt, value, errors) {
if (isNullOrUndefined(value))
return undefined;
var key = value.toLowerCase();
var val = opt.type.get(key);
if (val !== undefined) {
return val;
}
else {
errors.push(createCompilerDiagnosticForInvalidCustomType(opt));
}
}
function convertJsonOptionOfListType(option, values, basePath, errors) {
return ts.filter(ts.map(values, function (v) { return convertJsonOption(option.element, v, basePath, errors); }), function (v) { return !!v; });
}
function trimString(s) {
return typeof s.trim === "function" ? s.trim() : s.replace(/^[\s]+|[\s]+$/g, "");
}
var invalidTrailingRecursionPattern = /(^|\/)\*\*\/?$/;
var invalidMultipleRecursionPatterns = /(^|\/)\*\*\/(.*\/)?\*\*($|\/)/;
var invalidDotDotAfterRecursiveWildcardPattern = /(^|\/)\*\*\/(.*\/)?\.\.($|\/)/;
var watchRecursivePattern = /\/[^/]*?[*?][^/]*\//;
var wildcardDirectoryPattern = /^[^*?]*(?=\/[^/]*[*?])/;
function matchFileNames(filesSpecs, includeSpecs, excludeSpecs, basePath, options, host, errors, extraFileExtensions, jsonSourceFile) {
basePath = ts.normalizePath(basePath);
var validatedIncludeSpecs, validatedExcludeSpecs;
if (includeSpecs) {
validatedIncludeSpecs = validateSpecs(includeSpecs, errors, false, jsonSourceFile, "include");
}
if (excludeSpecs) {
validatedExcludeSpecs = validateSpecs(excludeSpecs, errors, true, jsonSourceFile, "exclude");
}
var wildcardDirectories = getWildcardDirectories(validatedIncludeSpecs, validatedExcludeSpecs, basePath, host.useCaseSensitiveFileNames);
var spec = { filesSpecs: filesSpecs, includeSpecs: includeSpecs, excludeSpecs: excludeSpecs, validatedIncludeSpecs: validatedIncludeSpecs, validatedExcludeSpecs: validatedExcludeSpecs, wildcardDirectories: wildcardDirectories };
return getFileNamesFromConfigSpecs(spec, basePath, options, host, extraFileExtensions);
}
function getFileNamesFromConfigSpecs(spec, basePath, options, host, extraFileExtensions) {
if (extraFileExtensions === void 0) { extraFileExtensions = []; }
basePath = ts.normalizePath(basePath);
var keyMapper = host.useCaseSensitiveFileNames ? caseSensitiveKeyMapper : caseInsensitiveKeyMapper;
var literalFileMap = ts.createMap();
var wildcardFileMap = ts.createMap();
var filesSpecs = spec.filesSpecs, validatedIncludeSpecs = spec.validatedIncludeSpecs, validatedExcludeSpecs = spec.validatedExcludeSpecs, wildcardDirectories = spec.wildcardDirectories;
var supportedExtensions = ts.getSupportedExtensions(options, extraFileExtensions);
if (filesSpecs) {
for (var _i = 0, filesSpecs_1 = filesSpecs; _i < filesSpecs_1.length; _i++) {
var fileName = filesSpecs_1[_i];
var file = ts.getNormalizedAbsolutePath(fileName, basePath);
literalFileMap.set(keyMapper(file), file);
}
}
if (validatedIncludeSpecs && validatedIncludeSpecs.length > 0) {
for (var _a = 0, _b = host.readDirectory(basePath, supportedExtensions, validatedExcludeSpecs, validatedIncludeSpecs, undefined); _a < _b.length; _a++) {
var file = _b[_a];
if (hasFileWithHigherPriorityExtension(file, literalFileMap, wildcardFileMap, supportedExtensions, keyMapper)) {
continue;
}
removeWildcardFilesWithLowerPriorityExtension(file, wildcardFileMap, supportedExtensions, keyMapper);
var key = keyMapper(file);
if (!literalFileMap.has(key) && !wildcardFileMap.has(key)) {
wildcardFileMap.set(key, file);
}
}
}
var literalFiles = ts.arrayFrom(literalFileMap.values());
var wildcardFiles = ts.arrayFrom(wildcardFileMap.values());
return {
fileNames: literalFiles.concat(wildcardFiles),
wildcardDirectories: wildcardDirectories,
spec: spec
};
}
ts.getFileNamesFromConfigSpecs = getFileNamesFromConfigSpecs;
function validateSpecs(specs, errors, allowTrailingRecursion, jsonSourceFile, specKey) {
return specs.filter(function (spec) {
var diag = specToDiagnostic(spec, allowTrailingRecursion);
if (diag !== undefined) {
errors.push(createDiagnostic(diag, spec));
}
return diag === undefined;
});
function createDiagnostic(message, spec) {
if (jsonSourceFile && jsonSourceFile.jsonObject) {
for (var _i = 0, _a = ts.getPropertyAssignment(jsonSourceFile.jsonObject, specKey); _i < _a.length; _i++) {
var property = _a[_i];
if (ts.isArrayLiteralExpression(property.initializer)) {
for (var _b = 0, _c = property.initializer.elements; _b < _c.length; _b++) {
var element = _c[_b];
if (ts.isStringLiteral(element) && element.text === spec) {
return ts.createDiagnosticForNodeInSourceFile(jsonSourceFile, element, message, spec);
}
}
}
}
}
return ts.createCompilerDiagnostic(message, spec);
}
}
function specToDiagnostic(spec, allowTrailingRecursion) {
if (!allowTrailingRecursion && invalidTrailingRecursionPattern.test(spec)) {
return ts.Diagnostics.File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0;
}
else if (invalidMultipleRecursionPatterns.test(spec)) {
return ts.Diagnostics.File_specification_cannot_contain_multiple_recursive_directory_wildcards_Asterisk_Asterisk_Colon_0;
}
else if (invalidDotDotAfterRecursiveWildcardPattern.test(spec)) {
return ts.Diagnostics.File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0;
}
}
function getWildcardDirectories(include, exclude, path, useCaseSensitiveFileNames) {
var rawExcludeRegex = ts.getRegularExpressionForWildcard(exclude, path, "exclude");
var excludeRegex = rawExcludeRegex && new RegExp(rawExcludeRegex, useCaseSensitiveFileNames ? "" : "i");
var wildcardDirectories = {};
if (include !== undefined) {
var recursiveKeys = [];
for (var _i = 0, include_1 = include; _i < include_1.length; _i++) {
var file = include_1[_i];
var spec = ts.normalizePath(ts.combinePaths(path, file));
if (excludeRegex && excludeRegex.test(spec)) {
continue;
}
var match = getWildcardDirectoryFromSpec(spec, useCaseSensitiveFileNames);
if (match) {
var key = match.key, flags = match.flags;
var existingFlags = wildcardDirectories[key];
if (existingFlags === undefined || existingFlags < flags) {
wildcardDirectories[key] = flags;
if (flags === 1) {
recursiveKeys.push(key);
}
}
}
}
for (var key in wildcardDirectories) {
if (ts.hasProperty(wildcardDirectories, key)) {
for (var _a = 0, recursiveKeys_1 = recursiveKeys; _a < recursiveKeys_1.length; _a++) {
var recursiveKey = recursiveKeys_1[_a];
if (key !== recursiveKey && ts.containsPath(recursiveKey, key, path, !useCaseSensitiveFileNames)) {
delete wildcardDirectories[key];
}
}
}
}
}
return wildcardDirectories;
}
function getWildcardDirectoryFromSpec(spec, useCaseSensitiveFileNames) {
var match = wildcardDirectoryPattern.exec(spec);
if (match) {
return {
key: useCaseSensitiveFileNames ? match[0] : match[0].toLowerCase(),
flags: watchRecursivePattern.test(spec) ? 1 : 0
};
}
if (ts.isImplicitGlob(spec)) {
return { key: spec, flags: 1 };
}
return undefined;
}
function hasFileWithHigherPriorityExtension(file, literalFiles, wildcardFiles, extensions, keyMapper) {
var extensionPriority = ts.getExtensionPriority(file, extensions);
var adjustedExtensionPriority = ts.adjustExtensionPriority(extensionPriority, extensions);
for (var i = 0; i < adjustedExtensionPriority; i++) {
var higherPriorityExtension = extensions[i];
var higherPriorityPath = keyMapper(ts.changeExtension(file, higherPriorityExtension));
if (literalFiles.has(higherPriorityPath) || wildcardFiles.has(higherPriorityPath)) {
return true;
}
}
return false;
}
function removeWildcardFilesWithLowerPriorityExtension(file, wildcardFiles, extensions, keyMapper) {
var extensionPriority = ts.getExtensionPriority(file, extensions);
var nextExtensionPriority = ts.getNextLowestExtensionPriority(extensionPriority, extensions);
for (var i = nextExtensionPriority; i < extensions.length; i++) {
var lowerPriorityExtension = extensions[i];
var lowerPriorityPath = keyMapper(ts.changeExtension(file, lowerPriorityExtension));
wildcardFiles.delete(lowerPriorityPath);
}
}
function caseSensitiveKeyMapper(key) {
return key;
}
function caseInsensitiveKeyMapper(key) {
return key.toLowerCase();
}
function convertCompilerOptionsForTelemetry(opts) {
var out = {};
for (var key in opts) {
if (opts.hasOwnProperty(key)) {
var type = getOptionFromName(key);
if (type !== undefined) {
out[key] = getOptionValueWithEmptyStrings(opts[key], type);
}
}
}
return out;
}
ts.convertCompilerOptionsForTelemetry = convertCompilerOptionsForTelemetry;
function getOptionValueWithEmptyStrings(value, option) {
switch (option.type) {
case "object":
return "";
case "string":
return "";
case "number":
return typeof value === "number" ? value : "";
case "boolean":
return typeof value === "boolean" ? value : "";
case "list":
var elementType_1 = option.element;
return ts.isArray(value) ? value.map(function (v) { return getOptionValueWithEmptyStrings(v, elementType_1); }) : "";
default:
return ts.forEachEntry(option.type, function (optionEnumValue, optionStringValue) {
if (optionEnumValue === value) {
return optionStringValue;
}
});
}
}
})(ts || (ts = {}));
var ts;
(function (ts) {
function countLines(program) {
var count = 0;
ts.forEach(program.getSourceFiles(), function (file) {
count += ts.getLineStarts(file).length;
});
return count;
}
function getDiagnosticText(_message) {
var _args = [];
for (var _i = 1; _i < arguments.length; _i++) {
_args[_i - 1] = arguments[_i];
}
var diagnostic = ts.createCompilerDiagnostic.apply(undefined, arguments);
return diagnostic.messageText;
}
var reportDiagnostic = ts.createDiagnosticReporter(ts.sys, ts.reportDiagnosticSimply);
function udpateReportDiagnostic(options) {
if (options.pretty) {
reportDiagnostic = ts.createDiagnosticReporter(ts.sys, ts.reportDiagnosticWithColorAndContext);
}
}
function padLeft(s, length) {
while (s.length < length) {
s = " " + s;
}
return s;
}
function padRight(s, length) {
while (s.length < length) {
s = s + " ";
}
return s;
}
function isJSONSupported() {
return typeof JSON === "object" && typeof JSON.parse === "function";
}
function executeCommandLine(args) {
var commandLine = ts.parseCommandLine(args);
var configFileName;
if (commandLine.options.locale) {
if (!isJSONSupported()) {
reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.The_current_host_does_not_support_the_0_option, "--locale"));
return ts.sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
}
ts.validateLocaleAndSetLanguage(commandLine.options.locale, ts.sys, commandLine.errors);
}
if (commandLine.errors.length > 0) {
ts.reportDiagnostics(commandLine.errors, reportDiagnostic);
return ts.sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
}
if (commandLine.options.init) {
writeConfigFile(commandLine.options, commandLine.fileNames);
return ts.sys.exit(ts.ExitStatus.Success);
}
if (commandLine.options.version) {
printVersion();
return ts.sys.exit(ts.ExitStatus.Success);
}
if (commandLine.options.help || commandLine.options.all) {
printVersion();
printHelp(commandLine.options.all);
return ts.sys.exit(ts.ExitStatus.Success);
}
if (commandLine.options.project) {
if (!isJSONSupported()) {
reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.The_current_host_does_not_support_the_0_option, "--project"));
return ts.sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
}
if (commandLine.fileNames.length !== 0) {
reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.Option_project_cannot_be_mixed_with_source_files_on_a_command_line));
return ts.sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
}
var fileOrDirectory = ts.normalizePath(commandLine.options.project);
if (!fileOrDirectory || ts.sys.directoryExists(fileOrDirectory)) {
configFileName = ts.combinePaths(fileOrDirectory, "tsconfig.json");
if (!ts.sys.fileExists(configFileName)) {
reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0, commandLine.options.project));
return ts.sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
}
}
else {
configFileName = fileOrDirectory;
if (!ts.sys.fileExists(configFileName)) {
reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.The_specified_path_does_not_exist_Colon_0, commandLine.options.project));
return ts.sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
}
}
}
else if (commandLine.fileNames.length === 0 && isJSONSupported()) {
var searchPath = ts.normalizePath(ts.sys.getCurrentDirectory());
configFileName = ts.findConfigFile(searchPath, ts.sys.fileExists);
}
if (commandLine.fileNames.length === 0 && !configFileName) {
printVersion();
printHelp(commandLine.options.all);
return ts.sys.exit(ts.ExitStatus.Success);
}
var commandLineOptions = commandLine.options;
if (configFileName) {
var reportWatchDiagnostic = ts.createWatchDiagnosticReporter();
var configParseResult = ts.parseConfigFile(configFileName, commandLineOptions, ts.sys, reportDiagnostic, reportWatchDiagnostic);
udpateReportDiagnostic(configParseResult.options);
if (ts.isWatchSet(configParseResult.options)) {
reportWatchModeWithoutSysSupport();
ts.createWatchModeWithConfigFile(configParseResult, commandLineOptions, createWatchingSystemHost(reportWatchDiagnostic));
}
else {
performCompilation(configParseResult.fileNames, configParseResult.options);
}
}
else {
udpateReportDiagnostic(commandLineOptions);
if (ts.isWatchSet(commandLineOptions)) {
reportWatchModeWithoutSysSupport();
ts.createWatchModeWithoutConfigFile(commandLine.fileNames, commandLineOptions, createWatchingSystemHost());
}
else {
performCompilation(commandLine.fileNames, commandLineOptions);
}
}
}
ts.executeCommandLine = executeCommandLine;
function reportWatchModeWithoutSysSupport() {
if (!ts.sys.watchFile || !ts.sys.watchDirectory) {
reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.The_current_host_does_not_support_the_0_option, "--watch"));
ts.sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped);
}
}
function performCompilation(rootFileNames, compilerOptions) {
var compilerHost = ts.createCompilerHost(compilerOptions);
enableStatistics(compilerOptions);
var program = ts.createProgram(rootFileNames, compilerOptions, compilerHost);
var exitStatus = compileProgram(program);
reportStatistics(program);
return ts.sys.exit(exitStatus);
}
function createWatchingSystemHost(reportWatchDiagnostic) {
var watchingHost = ts.createWatchingSystemHost(undefined, ts.sys, ts.parseConfigFile, reportDiagnostic, reportWatchDiagnostic);
watchingHost.beforeCompile = enableStatistics;
var afterCompile = watchingHost.afterCompile;
watchingHost.afterCompile = function (host, program, builder) {
afterCompile(host, program, builder);
reportStatistics(program);
};
return watchingHost;
}
function compileProgram(program) {
var diagnostics;
diagnostics = program.getSyntacticDiagnostics().slice();
if (diagnostics.length === 0) {
diagnostics = program.getOptionsDiagnostics().concat(program.getGlobalDiagnostics());
if (diagnostics.length === 0) {
diagnostics = program.getSemanticDiagnostics().slice();
}
}
var _a = program.emit(), emittedFiles = _a.emittedFiles, emitSkipped = _a.emitSkipped, emitDiagnostics = _a.diagnostics;
ts.addRange(diagnostics, emitDiagnostics);
return ts.handleEmitOutputAndReportErrors(ts.sys, program, emittedFiles, emitSkipped, diagnostics, reportDiagnostic);
}
function enableStatistics(compilerOptions) {
if (compilerOptions.diagnostics || compilerOptions.extendedDiagnostics) {
ts.performance.enable();
}
}
function reportStatistics(program) {
var statistics;
var compilerOptions = program.getCompilerOptions();
if (compilerOptions.diagnostics || compilerOptions.extendedDiagnostics) {
statistics = [];
var memoryUsed = ts.sys.getMemoryUsage ? ts.sys.getMemoryUsage() : -1;
reportCountStatistic("Files", program.getSourceFiles().length);
reportCountStatistic("Lines", countLines(program));
reportCountStatistic("Nodes", program.getNodeCount());
reportCountStatistic("Identifiers", program.getIdentifierCount());
reportCountStatistic("Symbols", program.getSymbolCount());
reportCountStatistic("Types", program.getTypeCount());
if (memoryUsed >= 0) {
reportStatisticalValue("Memory used", Math.round(memoryUsed / 1000) + "K");
}
var programTime = ts.performance.getDuration("Program");
var bindTime = ts.performance.getDuration("Bind");
var checkTime = ts.performance.getDuration("Check");
var emitTime = ts.performance.getDuration("Emit");
if (compilerOptions.extendedDiagnostics) {
ts.performance.forEachMeasure(function (name, duration) { return reportTimeStatistic(name + " time", duration); });
}
else {
reportTimeStatistic("I/O read", ts.performance.getDuration("I/O Read"));
reportTimeStatistic("I/O write", ts.performance.getDuration("I/O Write"));
reportTimeStatistic("Parse time", programTime);
reportTimeStatistic("Bind time", bindTime);
reportTimeStatistic("Check time", checkTime);
reportTimeStatistic("Emit time", emitTime);
}
reportTimeStatistic("Total time", programTime + bindTime + checkTime + emitTime);
reportStatistics();
ts.performance.disable();
}
function reportStatistics() {
var nameSize = 0;
var valueSize = 0;
for (var _i = 0, statistics_1 = statistics; _i < statistics_1.length; _i++) {
var _a = statistics_1[_i], name = _a.name, value = _a.value;
if (name.length > nameSize) {
nameSize = name.length;
}
if (value.length > valueSize) {
valueSize = value.length;
}
}
for (var _b = 0, statistics_2 = statistics; _b < statistics_2.length; _b++) {
var _c = statistics_2[_b], name = _c.name, value = _c.value;
ts.sys.write(padRight(name + ":", nameSize + 2) + padLeft(value.toString(), valueSize) + ts.sys.newLine);
}
}
function reportStatisticalValue(name, value) {
statistics.push({ name: name, value: value });
}
function reportCountStatistic(name, count) {
reportStatisticalValue(name, "" + count);
}
function reportTimeStatistic(name, time) {
reportStatisticalValue(name, (time / 1000).toFixed(2) + "s");
}
}
function printVersion() {
ts.sys.write(getDiagnosticText(ts.Diagnostics.Version_0, ts.version) + ts.sys.newLine);
}
function printHelp(showAllOptions) {
var output = [];
var syntaxLength = getDiagnosticText(ts.Diagnostics.Syntax_Colon_0, "").length;
var examplesLength = getDiagnosticText(ts.Diagnostics.Examples_Colon_0, "").length;
var marginLength = Math.max(syntaxLength, examplesLength);
var syntax = makePadding(marginLength - syntaxLength);
syntax += "tsc [" + getDiagnosticText(ts.Diagnostics.options) + "] [" + getDiagnosticText(ts.Diagnostics.file) + " ...]";
output.push(getDiagnosticText(ts.Diagnostics.Syntax_Colon_0, syntax));
output.push(ts.sys.newLine + ts.sys.newLine);
var padding = makePadding(marginLength);
output.push(getDiagnosticText(ts.Diagnostics.Examples_Colon_0, makePadding(marginLength - examplesLength) + "tsc hello.ts") + ts.sys.newLine);
output.push(padding + "tsc --outFile file.js file.ts" + ts.sys.newLine);
output.push(padding + "tsc @args.txt" + ts.sys.newLine);
output.push(ts.sys.newLine);
output.push(getDiagnosticText(ts.Diagnostics.Options_Colon) + ts.sys.newLine);
var optsList = showAllOptions ?
ts.optionDeclarations.slice().sort(function (a, b) { return ts.compareValues(a.name.toLowerCase(), b.name.toLowerCase()); }) :
ts.filter(ts.optionDeclarations.slice(), function (v) { return v.showInSimplifiedHelpView; });
marginLength = 0;
var usageColumn = [];
var descriptionColumn = [];
var optionsDescriptionMap = ts.createMap();
for (var i = 0; i < optsList.length; i++) {
var option = optsList[i];
if (!option.description) {
continue;
}
var usageText_1 = " ";
if (option.shortName) {
usageText_1 += "-" + option.shortName;
usageText_1 += getParamType(option);
usageText_1 += ", ";
}
usageText_1 += "--" + option.name;
usageText_1 += getParamType(option);
usageColumn.push(usageText_1);
var description = void 0;
if (option.name === "lib") {
description = getDiagnosticText(option.description);
var element = option.element;
var typeMap = element.type;
optionsDescriptionMap.set(description, ts.arrayFrom(typeMap.keys()).map(function (key) { return "'" + key + "'"; }));
}
else {
description = getDiagnosticText(option.description);
}
descriptionColumn.push(description);
marginLength = Math.max(usageText_1.length, marginLength);
}
var usageText = " @<" + getDiagnosticText(ts.Diagnostics.file) + ">";
usageColumn.push(usageText);
descriptionColumn.push(getDiagnosticText(ts.Diagnostics.Insert_command_line_options_and_files_from_a_file));
marginLength = Math.max(usageText.length, marginLength);
for (var i = 0; i < usageColumn.length; i++) {
var usage = usageColumn[i];
var description = descriptionColumn[i];
var kindsList = optionsDescriptionMap.get(description);
output.push(usage + makePadding(marginLength - usage.length + 2) + description + ts.sys.newLine);
if (kindsList) {
output.push(makePadding(marginLength + 4));
for (var _i = 0, kindsList_1 = kindsList; _i < kindsList_1.length; _i++) {
var kind = kindsList_1[_i];
output.push(kind + " ");
}
output.push(ts.sys.newLine);
}
}
for (var _a = 0, output_1 = output; _a < output_1.length; _a++) {
var line = output_1[_a];
ts.sys.write(line);
}
return;
function getParamType(option) {
if (option.paramType !== undefined) {
return " " + getDiagnosticText(option.paramType);
}
return "";
}
function makePadding(paddingLength) {
return Array(paddingLength + 1).join(" ");
}
}
function writeConfigFile(options, fileNames) {
var currentDirectory = ts.sys.getCurrentDirectory();
var file = ts.normalizePath(ts.combinePaths(currentDirectory, "tsconfig.json"));
if (ts.sys.fileExists(file)) {
reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.A_tsconfig_json_file_is_already_defined_at_Colon_0, file));
}
else {
ts.sys.writeFile(file, ts.generateTSConfig(options, fileNames, ts.sys.newLine));
reportDiagnostic(ts.createCompilerDiagnostic(ts.Diagnostics.Successfully_created_a_tsconfig_json_file));
}
return;
}
})(ts || (ts = {}));
if (ts.Debug.isDebugging) {
ts.Debug.enableDebugInfo();
}
if (ts.sys.tryEnableSourceMapsForHost && /^development$/i.test(ts.sys.getEnvironmentVariable("NODE_ENV"))) {
ts.sys.tryEnableSourceMapsForHost();
}
ts.executeCommandLine(ts.sys.args);